
    dl                      d Z 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ZddlZddlmZ ddlmc mZ dd	lmZmZ ddlZdd
lmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 	 ddl9Z9dZ:n# e;$ r dZ:Y nw xY wdddddddddddddZ<ddZ=dd#Z>dd$Z?d% Z@dd&ZAdd)ZBdd*ZCdd-ZDdd/ZEejF        d0             ZGejF        d1             ZHejF        d2             ZIejF        d3             ZJejF        d4             ZKejF        d5             ZLejF        d6             ZMejF        d7             ZNejF        d8             ZOejF        d9             ZPejF        d:             ZQejF        d;             ZRejF        d<             ZSejF        d=             ZTejF        d>             ZUejF        d?             ZVejF        d@             ZWdAdBgZXdCdDgZYg dEZZg dFZ[eXeYz   eZz   Z\eXeYz   e[z   Z]e\dGgz   Z^e]dHgz   Z_ej`        ja        ej`        b                    de^          dI                         Zcej`        ja        ej`        b                    de^          dJ                         Zdej`        ja        ej`        b                    de^          dK                         Zeej`        ja        ej`        b                    de^          ej`        b                    dLddMg          dN                                     Zfej`        ja        ej`        b                    de^          ej`        b                    dOdPdQg          dR                                     Zgej`        ja        ej`        b                    de^          dS                         Zhej`        ja        ej`        b                    de_          dT                         Ziej`        ja        ej`        b                    de_          dU                         Zjej`        ja        ej`        b                    de]          dV                         Zkej`        ja        ej`        b                    de_          dW                         Zlej`        ja        ej`        b                    de]          dX                         Zmej`        ja        ej`        b                    de]          dY                         Znej`        ja        ej`        b                    de\          dZ                         Zoej`        ja        ej`        b                    deX          d[                         Zpej`        ja        ej`        b                    deX          d\                         Zqej`        ja        ej`        b                    deY          ej`        b                    d]d^d_g          d`                                     Zrda Zsdb Zt G dc dd          Zu G de dfeu          Zv G dg dheu          Zw G di dj          Zx G dk dlex          Zyej`        z                    e: dmn           G do dpewey                      Z{ G dq drevey          Z|ej`        z                    e: dmn           G ds dtewex                      Z} G du dve}          Z~ej`        ja         G dw dxe}                      Zej`        ja         G dy dze}                      Z G d{ d|evex          Zed}j        ed}j        ej        d}j        ed}j        ed~j        edj         ed          d ej        dj        edj        i	Zd ZddZ G d d          ZdS )a  SQL io tests

The SQL tests are broken down in different classes:

- `PandasSQLTest`: base class with common methods for all test classes
- Tests for the public API (only tests with sqlite3)
    - `_TestSQLApi` base class
    - `TestSQLApi`: test the public API with sqlalchemy engine
    - `TestSQLiteFallbackApi`: test the public API with a sqlite DBAPI
      connection
- Tests for the different SQL flavors (flavor specific type conversions)
    - Tests for the sqlalchemy mode: `_TestSQLAlchemy` is the base class with
      common methods. The different tested flavors (sqlite3, MySQL,
      PostgreSQL) derive from the base class
    - Tests for the fallback mode (`TestSQLiteFallback`)

    )annotationsN)closing)datedatetimetime	timedelta)StringIOPath)lib)is_datetime64_dtypeis_datetime64tz_dtype)
	DataFrameIndex
MultiIndexSeries	Timestampconcat
date_rangeisnato_datetimeto_timedelta)ArrowStringArrayStringArray)Version)sql)SQLAlchemyEngineSQLDatabaseSQLiteDatabase
get_enginepandasSQL_builderread_sql_queryread_sql_tableTFz1SELECT * 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dialectstrc                    ddl m}m}m}m}m}m} | dk    r|n|} |            } |d| |d|           |d|           |d|           |d|           |d	 |d
                              }	|	S )Nr   )REALColumnFloatMetaDataStringTabler&   irisSepalLength
SepalWidthPetalLength
PetalWidthName   )
sqlalchemyr-   r.   r/   r0   r1   r2   )
r*   r-   r.   r/   r0   r1   r2   dtypemetadatar3   s
             T/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/pandas/tests/io/test_sql.pyiris_table_metadatar>   m   s                    ,,EE$ExzzH5}e$$|U##}e$$|U##vvvc{{## D K    connsqlite3.Connection	iris_filer   c                0   |                                  }d}|                    |           |                    d           5 }t          j        |          }t          |           d}|                    ||           d d d            d S # 1 swxY w Y   d S )NzCREATE TABLE iris (
            "SepalLength" REAL,
            "SepalWidth" REAL,
            "PetalLength" REAL,
            "PetalWidth" REAL,
            "Name" TEXT
        )newlinez&INSERT INTO iris VALUES(?, ?, ?, ?, ?))cursorexecuteopencsvreadernextexecutemany)r@   rB   curstmtcsvfilerJ   s         r=   create_and_load_iris_sqlite3rP      s    
++--CD KK		%	% &G$$V7f%%%	& & & & & & & & & & & & & & & & & &s   <BBBc                l  
 ddl m} ddlm} t	          |          }|                    d           5 }t          j        |          }t          |          

fd|D             } ||          	                    |          }	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   d d d            d S # 1 swxY w Y   d S )	Nr   insertEnginerD   c                J    g | ]}t          t          |                     S  dictzip).0rowheaders     r=   
<listcomp>z(create_and_load_iris.<locals>.<listcomp>   s+    ;;;S$s63''((;;;r?   T
checkfirstbind)r:   rS   sqlalchemy.enginerU   r>   rH   rI   rJ   rK   values
isinstanceconnectbegindropcreaterG   )r@   rB   r*   rS   rU   r3   rO   rJ   paramsrN   r]   s             @r=   create_and_load_irisrk      s   !!!!!!((((((w''D		%	% #G$$f;;;;F;;;vd||""6**dF## 
	# '4ZZ\\ ' 'IIdtI444KKTK***LL&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '' ' ' ' ' ' ' ' ' ' ' ' ' ' '  # #		$4	000&&&T"""# # # # # # # # # # # # # # ## # # # # # # # # # # # # # # # # #s   A4F)'D"<AD?D"DD"DD"F)"D&	&F))D&	*F)AFF)F	F)F	F))F-0F-c                F   d}t          | t          j                  r+|                                 }|                    |           d S ddlm} ddlm}  ||          }t          | |          rp| 	                                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 | 
                                5  |                     |           d d d            d S # 1 swxY w Y   d S )Nz+CREATE VIEW iris_view AS SELECT * FROM irisr   textrT   )re   sqlite3
ConnectionrF   rG   r:   rn   rc   rU   rf   rg   )r@   rN   rM   rn   rU   s        r=   create_and_load_iris_viewrq      s   8D$*++ #kkmmD######,,,,,,tDzzdF## 	# '4ZZ\\ ' 'LL&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '  # #T"""# # # # # # # # # # # # # # # # # #sH   CB:.C:B>	>CB>	CCC3DDDc                   ddl m}m}m}m}m}m}m}m} | dk    r|n|}	| dk    r|n|}
 |            } |d| |d|           |d|	           |d|           |d|           |d	|           |d
|           |d|
           |d|           |d|
                    }| dk    r)|	                     |d |d                               |S )Nr   )TEXTBooleanr.   DateTimer/   Integerr0   r2   r$   typesTextColDateCol
IntDateColIntDateOnlyColFloatColIntColBoolColIntColWithNullBoolColWithNullr&   DateColWithTzT)timezone)
r:   rs   rt   r.   ru   r/   rv   r0   r2   append_column)r*   rs   rt   r.   ru   r/   rv   r0   r2   	date_type	bool_typer<   rw   s                r=   types_table_metadatar      sy   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  8++I"h..GIxzzHEy$y)$$|W%%))z5!!x!!y)$$)) ),, E ,FF?HHd4K4K4KLLMMMLr?   
types_data
list[dict]c                    |                                  }d}|                    |           d}|                    ||           d S )Na  CREATE TABLE types (
                    "TextCol" TEXT,
                    "DateCol" TEXT,
                    "IntDateCol" INTEGER,
                    "IntDateOnlyCol" INTEGER,
                    "FloatCol" REAL,
                    "IntCol" INTEGER,
                    "BoolCol" INTEGER,
                    "IntColWithNull" INTEGER,
                    "BoolColWithNull" INTEGER
                )zY
            INSERT INTO types
            VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)
            )rF   rG   rL   )r@   r   rM   rN   s       r=   create_and_load_types_sqlite3r      sM    
++--C
D KKD OOD*%%%%%r?   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   rR   rT   Tr_   ra   )r:   rS   rc   rU   r   rd   re   rf   rg   rh   ri   rG   )r@   r   r*   rS   rU   rw   rN   s          r=   create_and_load_typesr      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framer   c                    | j         d         j        }| j        d         }t          |t          j                  sJ t          j        |j        g d           | j	        dv sJ d S )Nr   ffffff@g      @gffffff?皙?Iris-setosa))      )   r   )
dtypestypeiloc
issubclassnpfloatingtmequalContentsrd   shape)r   pytyper\   s      r=   check_iris_framer     si    \!_!F
*Q-Cfbk*****SZ!D!D!DEEE;,,,,,,,r?   
table_namec                b   d| }t          | t          j                  rA|                                 }|                    |                                          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   )create_enginerT   )re   ro   rp   rF   rG   fetchoner:   r   rc   rU   r+   rf   exec_driver_sql
scalar_onedispose)r@   r   rN   rM   r   rU   engines          r=   
count_rowsr     s6   :j::D$*++ ;kkmm{{4  ))++A..,,,,,,,,,,,,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:::sB   D "'C*	D *C..D 1C.2D D"	'E==FFc                <     | dddd          }t          |          S )NiodatarI   ziris.csvr
   )datapath	iris_paths     r=   r   r   +  s#    vuj99I	??r?   c                 6    dd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$@   Fz2000-01-01 00:00:00-08:00)
rx   ry   rz   r{   r|   r}   r~   r   r   r   2000-01-04 00:00:00i 'Pi\2z2000-06-01 00:00:00-07:00rW   rW   r?   r=   r   r   1  s`     ,#&$8	
 	
 ,$&"#8	
 	
 r?   c           
         dddddddddd	}t          |           }||                                                             |          S )Nr+   int64float)	rx   ry   rz   r{   r|   r}   r~   r   r   )r   keysastype)r   r   dfs      r=   types_data_framer   O  s[     !!"
 
F 
:		Bfkkmm##F+++r?   c                 4    g d} g d}t          ||           S )N)index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?columns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              #    K   t          j        d          }t          j        d          } |j        dd|j        j        j        i|j        j                  } |j        |          }|	                    d          st          || d           |	                    d          s+|D ]}|                    d	           t          ||d           |V  |                                5 }|                                5   |j        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 )Nr:   pymysqlz*mysql+pymysql://root@localhost:3306/pandasclient_flag)connect_args	poolclassr3   r%   rw   r    DROP TABLE IF EXISTS test_frame;)pytestimportorskipr   	constantsCLIENTMULTI_STATEMENTSpoolNullPoolinspect	has_tablerk   popr   rf   rg   rn   rG   r   )	r   r   r:   r   r   inspentryr@   rN   s	            r=   mysql_pymysql_enginer     s     $\22J!),,G%Z%4#W%6%=%NO/*  F
 :f%%D>>&!! 9VY888>>'"" ; 	' 	'EIIo&&&&fj':::
LLL			 TZZ\\ 	 	":?#EFFDLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	               NNs6   'E<&D."E.D2	2E5D2	6EE	E	c              #  l   K   |                                  5 }|V  d d d            d S # 1 swxY w Y   d S Nrf   )r   r@   s     r=   mysql_pymysql_connr     s      		%	%	'	' 4


                    )--c              #  t  K   t          j        d          }t          j        d            |j        d|j        j                  } |j        |          }|                    d          st          || d           |                    d          st          ||d           |V  |	                                5 }|
                                5   |j        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 )	Nr:   psycopg2z=postgresql+psycopg2://postgres:postgres@localhost:5432/pandasr   r3   r&   rw   r   )r   r   r   r   r   r   r   rk   r   rf   rg   rn   rG   r   )r   r   r:   r   r   r@   rN   s          r=   postgresql_psycopg2_enginer     s     $\22J

###%Z%G/*  F :f%%D>>&!! >VY===>>'"" @fj,???
LLL			 TZZ\\ 	 	":?#EFFDLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	               NNs6   ;D&D6DD	D	D	
DD D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=   postgresql_psycopg2_connr     s      	#	+	+	-	- 


                 r   c               #     K   t          j        d           t          j                    5 } d| z   V  d d d            d S # 1 swxY w Y   d S )Nr:   
sqlite:///)r   r   r   ensure_cleannames    r=   
sqlite_strr     s      
%%%			 "dT!!!!" " " " " " " " " " " " " " " " " "s   ?AAc              #     K   t          j        d          } |j        | |j        j                  }|V  |                                 d S )Nr:   r   )r   r   r   r   r   r   )r   r:   r   s      r=   sqlite_enginer     sQ      $\22J%Z%jJO<TUUUF
LLL
NN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=   sqlite_connr     s      				 	  D


                 r   c                    t          j        d          } |j        |           }t          ||d           |                                 | S )Nr:   r$   )r   r   r   rk   r   )r   r   r:   r   s       r=   sqlite_iris_strr     sL    $\22J%Z%j11FH555
NNr?   c                (    t          | |d           | S )Nr$   )rk   )r   r   s     r=   sqlite_iris_enginer     s    	8<<<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=   sqlite_iris_connr     s      		#	#	%	% 


                 r   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   ro   rf   )closing_connr@   s     r=   sqlite_buildinr     s      		GOJ77	8	8 L 	TJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s1   A=AA	AA	AAAc                &    t          | |           | S r   )rP   )r   r   s     r=   sqlite_buildin_irisr    s     ;;;r?   r   r   r   r   )r   r   r   )r   r   r   r   r  c                b    |                     |           } |                    d| dd           d S )NtestappendF	if_existsr   )getfixturevalueto_sql)r@   r   requests      r=   test_dataframe_to_sqlr  "  s:     ""4((DvtxuEEEEEr?   c           
        t          j        d           t          t          j        dgd          t          j        t          ddd          gd          t          j        t          d          gd          t          j        dgd	          d
          }|                    |           } t          j	        t          d          5  |                    d| dd           d d d            d S # 1 swxY w Y   d S )Npyarrowr   zint8[pyarrow]r;     timestamp[ns][pyarrow]zduration[ns][pyarrow]azstring[pyarrow])intr   r   stringzthe 'timedelta'match
test_arrowreplaceFr  )r   r   r   pdarrayr   r   r  r   assert_produces_warningUserWarningr	  r@   r
  r   s      r=   "test_dataframe_to_sql_arrow_dtypesr  *  s[    	"""	8QC777$1%%&.F   9Q<<.8OPPPhu,=>>>	
 	
	
 	
B ""4((D		#K7H	I	I	I H H
		,		GGGH H H H H H H H H H H H H H H H H Hs   	C00C47C4c           
         t          j        d           t          dt          j        t          ddd          |gd          i          }|                    |           } |                    d| dd	
           d S )Nr  r   r  r   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IIlDIUICCCCCr?   methodmultic                (   |                     |           } 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 )NTneed_transaction
test_framer!  r  r!   r	  r   r   len)r@   r!  r   r
  	pandasSQLs        r=   test_to_sqlr+  N  s     ""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   0A$$A(+A(zmode, num_row_coef)r  r   )r     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@   modenum_row_coefr   r
  r*  s         r=   test_to_sql_existr2  Y  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 existsr  )r  r!   r	  r   r   raises
ValueError)r@   r   r
  r*  msgs        r=   test_to_sql_exist_failr7  e  sn    ""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   r5   )r  r"   r   r  read_sqlr   r   r@   r
  
iris_frames      r=   test_read_iris_queryr?  r  s     ""4((D 4d;;JZ   1488JZ   ;TBBJv%%%%:-------r?   c                j   |                     |           } t          t          d| d                    }t          |           t          t	          j        d| d                    }t          |           t          t	          j        d| d                    }|j        dk    sJ d|j        v sJ d S )Nr9     	chunksizer:  r;  r5   )r  r   r"   r   r  r<  r   r   r=  s      r=   test_read_iris_query_chunksizerD    s     ""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                l   |                     |           } 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   )r0   r2   r   selectr3   )autoload_withr   r   r   lengthrj   )r  r:   r0   r2   r   rF  re   r+   r"   r   r   )
r@   r
  r0   r2   r   rF  r<   autoload_conr3   r>  s
             r=   .test_read_iris_query_expression_with_parameterrL    s    ""4((D            xzzH*4T3*?*?I==&&&TL5>>>DtdMS#I#I  J Z   $  r?   c                    t           d                                         D ]\  }}|| v r nt          d|  d          |                    |           } t	          || d          }t          |           d S )Nr'   zNo part of z( found in SQL_STRINGS['read_parameters']r   r   rJ  )SQL_STRINGSitemsKeyErrorr  r"   r   )r@   r
  dbqueryr>  s        r=   *test_read_iris_query_string_with_parameterrT    s     !!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 Nr3   )r  r#   r   r  r<  r=  s      r=   test_read_iris_tablerW    sY     ""4((D--JZ   VT**JZ     r?   c                    |                     |           } t          t          d| d                    }t          |           t          t	          j        d| d                    }t          |           d S )Nr3   rA  rB  )r  r   r#   r   r  r<  r=  s      r=   test_read_iris_table_chunksizerY    ss     ""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 )Nr   c                J    g | ]}t          t          |                     S rW   rX   )r[   r\   r   s     r=   r^   z8test_to_sql_callable.<locals>.sample.<locals>.<listcomp>  s)    :::Ss^^$$:::r?   )r  rG   tablerS   )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'  r   r(  )r@   r   r
  ra  r*  r`  s        @r=   test_to_sql_callablerb    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                   |                     |           } 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          j                  sJ d S Nrw   )r  r   r#   r   r|   r;   r   r   r   r}   integerr~   r   r   r  s      r=   test_default_type_conversionrf    s     ""4((D		GT	*	*Bbk',bk:::::bio*BJ77777 bj&+RZ88888 b'-2BK@@@@@ b(.3R[AAAAAAAr?   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   rm   rT   r   r,     皙?r   333333?r  br&  Fr   z}DROP PROCEDURE IF EXISTS get_testdb;

    CREATE PROCEDURE get_testdb ()

    BEGIN
        SELECT * FROM test_frame;
    ENDzCALL get_testdb();)r  r:   rn   rc   rU   r   r	  re   rf   rg   rG   r   r"   r   assert_frame_equalr<  )	r@   r
  rn   rU   r   procengine_connres1res2s	            r=   test_read_procedureru    sB    ""4((D
  ((((((	99	:	:BIIlDI...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_countr,  zSuccess!c                8   fd}|                     |           } t          ddgddgddgd          }|                    d	| d
|          }t          t                    s|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 )"rW   )r[   ks     r=   r^   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)
connectionrF   r	   rI   writer	writerowsseekjoinschemar   copy_expert)r]  r@   r   r_  
dbapi_connrM   s_bufr  r   r   	sql_queryrv  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r   r,  rk  r   r  ncol1col2col3r&  F)r   r!  )	r  r   r	  re   r  r   r#   r   rp  )r@   rv  r
  r  expectedresult_countresults    `     r=   (test_copy_from_callable_insertion_methodr    s        & ""4((D1a&3*sCjQQRRH??d%0@ #  L nc** .####~----d33F&(+++++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   r4  	TypeErrorr   r  FutureWarningr   rG   )r   s    r=   test_execute_typeerrorr  8  s,   	y(U	V	V	V B B'5
 
 
 	B 	B
 K,.@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	BB B B B B B B B B B B B B B B B B Bs4   A2AA2A	A2!A	"A22A69A6c                    t          j        t          d          5  t          j        d|            d d d            d S # 1 swxY w Y   d S )Nr  r  r  )r   r  r  r   rG   )r  s    r=   test_execute_deprecatedr  B  s    		#1
 
 
 ? ?
 	(*=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   ?AAc                      e Zd Zd ZdS )	MixInBasec                   t          | d          r| j                                         	 |                                 }|5  |                     |          D ]}|                     ||           |                     |          D ]}|                     ||           	 d d d            d S # 1 swxY w Y   d S # t          j	        j
        t          j
        f$ r Y d S w xY w)Nr@   )hasattrr@   closerf   _get_all_views	drop_view_get_all_tables
drop_tabler:   excOperationalErrorro   )selfr@   viewtbls       r=   teardown_methodzMixInBase.teardown_methodM  sB   4   	IOO		/<<>>D  / / //55 / /DNN4....//55 / /COOC....// / / / / / / / / / / / / / / / / / /1IJ 	 	 	DD	s$   B9 AB,,B03B09 CCN)__name__
__module____qualname__r  rW   r?   r=   r  r  L  s#        / / / / /r?   r  c                  ,    e Zd Zd Zd Zd Zd Zd ZdS )SQLiteMixInc                *    t          j        d          S r   ro   rf   r  s    r=   rf   zSQLiteMixIn.connect_  s    z***r?   c                    |                     dt          j        |                      |                                 d S NzDROP TABLE IF EXISTS rG   r   _get_valid_sqlite_namecommitr  r   r@   s      r=   r  zSQLiteMixIn.drop_tableb  s9    US-G
-S-SUUVVVr?   c                h    |                     d          }d |                                D             S )Nz1SELECT name FROM sqlite_master WHERE type='table'c                    g | ]
}|d          S r   rW   )r[   r]  s     r=   r^   z/SQLiteMixIn._get_all_tables.<locals>.<listcomp>h  s    333Ua333r?   rG   fetchallr  r@   cs      r=   r  zSQLiteMixIn._get_all_tablesf  s0    LLLMM33ajjll3333r?   c                    |                     dt          j        |                      |                                 d S NzDROP VIEW IF EXISTS r  )r  	view_namer@   s      r=   r  zSQLiteMixIn.drop_viewj  s9    SC,Fy,Q,QSSTTTr?   c                h    |                     d          }d |                                D             S )Nz0SELECT name FROM sqlite_master WHERE type='view'c                    g | ]
}|d          S r  rW   )r[   r  s     r=   r^   z.SQLiteMixIn._get_all_views.<locals>.<listcomp>p  s    111DQ111r?   r  r  s      r=   r  zSQLiteMixIn._get_all_viewsn  s0    LLKLL11AJJLL1111r?   N)r  r  r  rf   r  r  r  r  rW   r?   r=   r  r  ^  s_        + + +  4 4 4  2 2 2 2 2r?   r  c                  B    e Zd Zed             Zd Zd Zd Zd Zd Z	dS )SQLAlchemyMixInc                8    | j                                          d S r   )r   r   clss    r=   teardown_classzSQLAlchemyMixIn.teardown_classt  s    
r?   c                4    | j                                         S r   )r   rf   r  s    r=   rf   zSQLAlchemyMixIn.connectx  s    {""$$$r?   c                "   |                                 r&|                                                                 |                                5  t	          j        |                              |           d d d            d S # 1 swxY w Y   d S r   )in_transactionget_transactionrollbackrg   r   r   r  r  s      r=   r  zSQLAlchemyMixIn.drop_table{  s       	.  ""++---ZZ\\ 	9 	9OD!!,,Z888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   (BBBc                H    ddl m}  ||                                          S Nr   r   )r:   r   get_table_namesr  r@   r   s      r=   r  zSQLAlchemyMixIn._get_all_tables  s.    &&&&&&wt}},,...r?   c                L   |j         j        j                            |          }|                                r&|                                                                 |                                5  |                    d|            d d d            d S # 1 swxY w Y   d S r  )	r   r*   identifier_preparerquote_identifierr  r  r  rg   r   )r  r  r@   quoted_views       r=   r  zSQLAlchemyMixIn.drop_view  s    k)=NN
 
    	.  ""++---ZZ\\ 	G 	G  !E!E!EFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   3BB Bc                H    ddl m}  ||                                          S r  )r:   r   get_view_namesr  s      r=   r  zSQLAlchemyMixIn._get_all_views  s.    &&&&&&wt}}++---r?   N)
r  r  r  classmethodr  rf   r  r  r  r  rW   r?   r=   r  r  s  s{          [% % %9 9 9/ / /
G G G. . . . .r?   r  c                  V    e Zd ZdZd Zd Zd Zd Zd Zd Z	dd	Z
d
 Zd Zd Zd ZdS )PandasSQLTestzT
    Base class with common private methods for SQLAlchemy and fallback cases.

    c                    |                      d| j                   t          | j        t          j                  rt          | j        |           d S t          | j        || j                   d S rV  )r  r@   re   ro   rp   rP   rk   flavor)r  r   s     r=   load_iris_datazPandasSQLTest.load_iris_data  sd    	***di!344 	D(I>>>>> It{CCCCCr?   c                
   | j         dk    r|D ]}|                    d           t          | j        t          j                  r#d |D             }t          | j        |           d S t          | j        || j                    d S )Nr&   r   c                P    g | ]#}t          |                                          $S rW   )tuplerd   )r[   r   s     r=   r^   z1PandasSQLTest.load_types_data.<locals>.<listcomp>  s(    HHHE%//HHHr?   )r  r   re   r@   ro   rp   r   r   )r  r   r   s      r=   load_types_datazPandasSQLTest.load_types_data  s    ;,&&# + +		/****di!344 	FHHZHHHJ)$)Z@@@@@!$)ZEEEEEr?   c                    t           d         | j                 }d}| j                            ||          }t	          |           d S )Nr'   rN  rJ  rO  r  r*  
read_queryr   r  rS  rj   r>  s       r=   _read_sql_iris_parameterz&PandasSQLTest._read_sql_iris_parameter  sG    -.t{;%^..uV.DD
$$$$$r?   c                    t           d         | j                 }ddd}| j                            ||          }t	          |           d S )Nr(   r   r   rH  rJ  r  r  s       r=   _read_sql_iris_named_parameterz,PandasSQLTest._read_sql_iris_named_parameter  sO    34T[A'377^..uV.DD
$$$$$r?   c                    t           d         | j                 }| j                            |d           }t	          |           d S )Nr)   rJ  r  )r  rS  r>  s      r=   (_read_sql_iris_no_parameter_with_percentz6PandasSQLTest._read_sql_iris_no_parameter_with_percent  sB    =>t{K^..uT.BB
$$$$$r?   c                    |                      d| j                   | j                            |j        d d         d          dk    sJ d S )Nr   r   )r  r@   r*  r	  r   r  r   s     r=   _to_sql_emptyzPandasSQLTest._to_sql_empty  sM    ty111~$$[%5bqb%9=IIQNNNNNNr?   autoc                :   |                      d| j                    | j        j        |dfd|i|dk    sJ | j                            d          sJ t          |          }t          | j        d          }||k    sJ |                      d| j                   dS )z `to_sql` with the `engine` paramr   r      N)r  r@   r*  r	  r   r)  r   )r  r   r   engine_kwargsnum_entriesnum_rowss         r=   _to_sql_with_sql_enginez%PandasSQLTest._to_sql_with_sql_engine  s     	ty111 "DN!] 39=J     
 ~''66666+&&di77;&&&& 	ty11111r?   c                "   |                      d| j                   | j                            |d          dk    sJ | j                            d          }|                    dd           d |j        _        t          j	        ||           d S )Ntest_frame_roundtripr  "SELECT * FROM test_frame_roundtriplevel_0Tinplace)
r  r@   r*  r	  r  	set_indexr   r   r   rp  r  r   r  s      r=   
_roundtripzPandasSQLTest._roundtrip  s    .	:::~$$[2HIIQNNNN**+OPPD111 !
fk22222r?   c                    | j                             d          }|                                }t          j        |g d           d S Nr9  r   )r*  rG   r   r   r   )r  iris_resultsr\   s      r=   _execute_sqlzPandasSQLTest._execute_sql  sI    ~--.BCC##%%
AAABBBBBr?   c                    t          j        ddgg ddg          }| j                            |d          dk    sJ |                     d          }|dggk    sJ d S )Nr    @line1r,        ?line2r   r   r   r   r   r   test_to_sql_saves_indexr,  )r   from_recordsr*  r	  _get_index_columns)r  r   ix_colss      r=   _to_sql_save_indexz PandasSQLTest._to_sql_save_index  s    # 12OOOTWSX
 
 
 ~$$R)BCCqHHHH))*CDDC5'!!!!!!r?   c                   | j                                         5 }d}t          | j         t                    r|                    |           n&ddlm}  ||          }|                    |           d d d            n# 1 swxY w Y    G d dt                    }d}t          | j         t                    rddlm}  ||          }	 | j                                         5 }|                    |            |d          # 1 swxY w Y   n# |$ r Y nw xY w| j         	                    d          }t          |          dk    sJ | j                                         5 }|                    |           d d d            n# 1 swxY w Y   | j         	                    d          }t          |          d	k    sJ d S )
Nz'CREATE TABLE test_trans (A INT, B TEXT)r   rm   c                      e Zd ZdS )7PandasSQLTest._transaction_test.<locals>.DummyExceptionN)r  r  r  rW   r?   r=   DummyExceptionr    s        Dr?   r  z/INSERT INTO test_trans (A,B) VALUES (1, 'blah')errorzSELECT * FROM test_transr   )r*  run_transactionre   r   rG   r:   rn   	Exceptionr   r  r)  )r  transrN   rn   r  ins_sqlresrt  s           r=   _transaction_testzPandasSQLTest._transaction_test  s   ^++-- 	$<D$..99 $d####++++++tDzzd###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$	 	 	 	 	Y 	 	 	 Ddnk22 	$''''''d7mmG	//11 .Ug&&&$nW---. . . . . . . . .  	 	 	D	 n''(BCC3xx1}}}} ^++-- 	#MM'"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#~(()CDD4yyA~~~~~~sT   AA??BBD $!DD		D D	D DD$FF
F
N)r  )r  r  r  __doc__r  r  r  r  r  r  r  r  r  r  r  rW   r?   r=   r  r    s         
D D DF F F% % %% % %% % %
O O O2 2 2 2(
3 
3 
3C C C" " "" " " " "r?   r  c            
      v   e Zd ZU dZdZded<    ej        d          d             Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                            dg d          ej                            dej        ddfej        ddfej        ddfej        ddfg          d                         Zd Zd Zd Zej                            d g d!          d"             Z d# Z!d$ Z"ej                            d%d&e#e$e#e$d'g          d(             Z%d) Z&d* Z'd+ Z(d, Z)d- Z*d. Z+d/ Z,d0 Z-d1 Z.d2 Z/d&S )3_TestSQLApia  
    Base class to test the public API.

    From this two classes are derived to run these tests for both the
    sqlalchemy mode (`TestSQLApi`) and the fallback mode
    (`TestSQLiteFallbackApi`).  These tests are run with sqlite3. Specific
    tests for the different sql flavours are included in `_TestSQLAlchemy`.

    Notes:
    flavor can always be passed even in SQLAlchemy mode,
    should be correctly ignored.

    we don't use drop_table because that isn't part of the public api

    r$   r+   r0  Tautousec                    |                                  | _        |                     |           |                     |           |                                  d S r   )rf   r@   r  r  load_test_data_and_sqlr  r   r   s      r=   setup_methodz_TestSQLApi.setup_method,  sQ    LLNN	I&&&Z(((##%%%%%r?   c                .    t          | j                   d S r   )rq   r@   r  s    r=   r"  z"_TestSQLApi.load_test_data_and_sql3  s    !$),,,,,r?   c                X    t          j        d| j                  }t          |           d S )NzSELECT * FROM iris_view)r   r"   r@   r   r  r>  s     r=   test_read_sql_viewz_TestSQLApi.test_read_sql_view6  s+    '(A49MM
$$$$$r?   c                    d}t          j        || j        d          }t          j        || j                  }t          j        t          |          |           d S )Nz/SELECT * FROM iris_view WHERE SepalLength < 0.0r   rB  )r   r"   r@   r   rp  r   )r  rS  
with_batchwithout_batchs       r=   &test_read_sql_with_chunksize_no_resultz2_TestSQLApi.test_read_sql_with_chunksize_no_result:  sU    A'tyAFFF
*5$)<<
fZ00-@@@@@r?   c                t    t          j        |d| j                   t          j        d| j                  sJ d S )Nr   )r   r	  r@   r   r  s     r=   r+  z_TestSQLApi.test_to_sql@  s8    
;ty999}]DI6666666r?   c                   t          j        |d| j        d           t          j        d| j                  sJ d}t	          j        t          |          5  t          j        |d| j        d           d d d            d S # 1 swxY w Y   d S )Ntest_frame2r.  r/  z"Table 'test_frame2' already existsr  )r   r	  r@   r   r   r4  r5  r  r   r6  s      r=   test_to_sql_failz_TestSQLApi.test_to_sql_failD  s    
;tyFKKKK}]DI666662]:S111 	P 	PJ{M49OOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   BB	Bc                
   t          j        |d| j        d           t          j        |d| j        d           t          j        d| j                  sJ t	          |          }t          | j        d          }||k    sJ d S )Nr   r.  r/  r  r   r	  r@   r   r)  r   r  r   r  r  s       r=   test_to_sql_replacez_TestSQLApi.test_to_sql_replaceL  s    
;tyFKKKK
;tyINNNN}]DI66666+&&di77;&&&&&&r?   c                (   t          j        |d| j        d          dk    sJ t          j        |d| j        d          dk    sJ t          j        d| j                  sJ dt	          |          z  }t          | j        d          }||k    sJ d S )Ntest_frame4r.  r/  r  r  r,  r3  r4  s       r=   test_to_sql_appendz_TestSQLApi.test_to_sql_appendW  s    z+}di6RRRVWWWWW J{M49QQQUVVVVV}]DI66666#k***di77;&&&&&&r?   c                    t          j        |d| j        d           t          j        d| j                  }t	          j        ||           d S )Ntest_frame5Fro  zSELECT * FROM test_frame5)r   r	  r@   r<  r   rp  )r  r   r  s      r=   test_to_sql_type_mappingz$_TestSQLApi.test_to_sql_type_mappinge  sJ    
;tyFFFF949EE
k622222r?   c                   t          t          j        dd          d          }t          j        |d| j        d           t          j        d	| j                  }t          j        |	                                |           d S )
Nr   r   r  seriesr   test_seriesFro  zSELECT * FROM test_series)
r   r   aranger   r	  r@   r"   r   rp  to_frame)r  ss2s      r=   test_to_sql_seriesz_TestSQLApi.test_to_sql_seriesk  st    29Qg...X>>>
1mTYe<<<< ;TYGG
ajjllB/////r?   c                :   t          j        |d| j                   t          j        d| j                  }|j        |_        |                    dd           |j                            t                     d |j        _        t          j
        ||           d S )Nr  conr  r  Tr  )r   r	  r@   r"   r   r  r   r  r   r   rp  r  s      r=   test_roundtripz_TestSQLApi.test_roundtripq  s    
; 6DIFFFF#$HdiXXX #(D111C    
fk22222r?   c                    t          j        |d| j        dd           t          j        d| j                  }t	          j        ||           d S )Nr  Fr,  )rF  r   rC  r  rE  )r   r	  r@   r"   r   rp  r  s      r=   test_roundtrip_chunksizez$_TestSQLApi.test_roundtrip_chunksize|  s_    
"		
 	
 	
 	
 #$HdiXXX
fk22222r?   c                    t          j        | j                  5 }|                    d          }d d d            n# 1 swxY w Y   |                                }t          j        |g d           d S r   )r   r!   r@   rG   r   r   r   )r  
pandas_sqlr  r\   s       r=   test_execute_sqlz_TestSQLApi.test_execute_sql  s    "49-- 	D%--.BCCL	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D##%%
AAABBBBBs   <A A c           
        t          j        d| j                  }t          |j        j        j        t          j                  rJ t          j        d| j        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| j        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| j        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| j        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| j        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 typesry   parse_datesi  r   ri  r   r  %Y-%m-%d %H:%M:%Srz   i        i  rA  r{   z%Y%m%dz
2010-10-10z
2010-12-12)r   r"   r@   r   ry   r;   r   r   
datetime64tolistr   rz   r{   r  r   s     r=   test_date_parsingz_TestSQLApi.test_date_parsing  s?     5tyAAbj.3R]CCCCC!499+
 
 
 "**/?????z  ""dAq!Q**dAq!Q**'
 
 
 
 

 !I"$78
 
 

 "**/?????z  ""dAq!Q**dAq!Q**'
 
 
 
 

 !49<.
 
 
 "--2BMBBBBB}##%%dBAq!,,dAq!Q***
 
 
 
 

 !49<:M
 
 
 "--2BMBBBBB}##%%dBAq!,,dAq!Q***
 
 
 
 

 !I)84
 
 

 "+16FFFFF ''))l##l##.
 
 
 
 
 
 
r?   r  )ignoreraisecoercezread_sql, text, moderN  )r:   fallbackrw   r:   c                    | j         |v rE|                    ddi          } ||| j        dd|ii          }t          j        ||           d S d S )Nry   zdatetime64[ns]errors)rF  rP  )r0  r   r@   r   rp  )r  r<  rn   r0  r  r   r  r  s           r=   test_custom_dateparsing_errorz)_TestSQLApi.test_custom_dateparsing_error  sz    " 9'..	;K/LMMHXI%0  F !&(33333 r?   c                    t          j        d| j        dddg          }t          |j        j        j        t          j                  sJ t          |j	        j        j        t          j                  sJ d S )NrN  ry   rz   )	index_colrP  )
r   r"   r@   r   r   r;   r   r   rT  rz   rV  s     r=   test_date_and_indexz_TestSQLApi.test_date_and_index  su     !I"L1	
 
 
 "(.-r}====="--2BMBBBBBBBr?   c                   t          t          ddgd                                                    }t          j        t
                    5  |                    d| j                  }d d d            n# 1 swxY w Y   |dk    sJ t          j	        d| j                  }t          j
        |d         |d                             d                     d S )	Nz00:00:01z00:00:03foor   test_timedeltar,  zSELECT * FROM test_timedeltar   )r   r   r@  r   r  r  r	  r@   r   r"   assert_series_equalr  )r  r   r  r  s       r=   rd  z_TestSQLApi.test_timedelta  s   &*j!9FFFGGPPRR'44 	B 	B99%5tyAAL	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bq    #$BDINN
ve}binnW.E.EFFFFFs   A44A8;A8c                    t          dddgi          }d}t          j        t          |          5  |                    d| j                  J 	 d d d            d S # 1 swxY w Y   d S )Nr  y      ?      ?y               @zComplex datatypes not supportedr  test_complex)r   r   r4  r5  r	  r@   )r  r   r6  s      r=   test_complex_raisesz_TestSQLApi.test_complex_raises  s    fb\*++/]:S111 	@ 	@99^TY77????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   AA!$A!zindex_name,index_label,expected))NNr   )Nother_labelri  )
index_nameNrj  )rj  ri  ri  )r   N0)Nr   rk  c                    t          dt          d          i          }||j        _        d}t	          j        |d| j        |           t	          j        || j                  }|j        d         |k    sJ d S )Nr  r  SELECT * FROM test_index_labeltest_index_labelindex_labelr   )	r   ranger   r   r   r	  r@   r"   r   )r  rj  rp  r  
temp_framerS  r   s          r=   test_to_sql_index_labelz#_TestSQLApi.test_to_sql_index_label  sz    $ a122
 *
0
:149+VVVV"5$)44}Q8++++++r?   c                x   d}t          dt          d          it          j        ddg                    }t	          j        |d| j                  }||k    sJ t	          j        d| j                  }|j        d         d	k    sJ |j        d
         dk    sJ t	          j        |d| j        dddg          }||k    sJ t	          j        d| j                  }|j        d d         	                                ddgk    sJ ddg|j
        _        t	          j        |d| j        d          }||k    sJ t	          j        d| j                  }|j        d d         	                                ddgk    sJ t	          j        |d| j        dddg          }||k    sJ t	          j        d| j                  }|j        d d         	                                ddgk    sJ d}t          j        t          |          5  t	          j        |d| j        dd           d d d            d S # 1 swxY w Y   d S )Nr  r  )A0A1)B0B1ro  rn  rm  r   r  r   level_1r  r   r   )r  rp  r,  r/  r   r   zALength of 'index_label' should match number of levels, which is 2r  )r   rq  r   from_productr   r	  r@   r"   r   rU  r   namesr   r4  r5  )r  expected_row_countrr  r  r   r6  s         r=   "test_to_sql_index_label_multiindexz._TestSQLApi.test_to_sql_index_label_multiindex  s   U1XX)<*FGG
 
 

 J(:DIFF+++++"#CTYOO}Q9,,,,}Q9,,,, Ic

 
 
 +++++"#CTYOO}RaR ''))c3Z7777 #&s
*DI
 
 
 +++++"#CTYOO}RaR ''))c3Z7777 Ic

 
 
 +++++"#CTYOO}RaR ''))c3Z7777Q]:S111 	 	J"	#   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   H//H36H3c                    t          j        ddgg dddg          }|                    d| j                   t	          j        d| j        ddg	          }t          j        ||d
           d S )Nr  r  r
  r   r   r  test_multiindex_roundtripz'SELECT * FROM test_multiindex_roundtripr`  Tcheck_index_type)r   r  r	  r@   r   r"   r   rp  r  r   r  s      r=   r  z%_TestSQLApi.test_multiindex_roundtripQ  s    # 12#OO*
 
 
 			-ty999#5tySRUJ
 
 
 	b&4@@@@@@r?   r;   Nr   r   c                   t          ddgddggddg          }|                    d| j                  d	k    sJ |                    |          }t	          j        d
| j        |          }t          j        ||           d S )N333333?g333333@ffffff@g333333@r   r   r   test_dtype_argumentr,  z$SELECT A, B FROM test_dtype_argumentrF  r;   )r   r	  r@   r   r   r"   r   rp  )r  r;   r   r  r  s        r=   r  z_TestSQLApi.test_dtype_argument^  s     c
S#J/#sDDDyy.	::a????99U###2	
 
 
 	fh/////r?   c                r    t          ddgddggddg          }t          j        |d| j        d	           d S )
Nr   r,  ri  r  r   r   test_frame_integer_col_namesr  r/  )r   r   r	  r@   rV  s     r=   test_integer_col_namesz"_TestSQLApi.test_integer_col_namess  sG    AA'!Q888
25tyIVVVVVVr?   c                J    t          j        |d| j                  }d|v sJ d S )Nr  rE  CREATEr   
get_schemar@   r  r   
create_sqls      r=   test_get_schemaz_TestSQLApi.test_get_schemaw  s1    ^KTYGGG
:%%%%%%r?   c                L    t          j        |d| j        d          }d|v sJ d S )Nr  pypi)rF  r  zCREATE TABLE pypi.r  r  s      r=   test_get_schema_with_schemaz'_TestSQLApi.test_get_schema_with_schema{  s3    ^KTYvVVV
#z111111r?   c                    | j         dk    r	ddlm} |}nd}t          ddgddgd	          }t	          j        |d
| j        d|i          }d|v sJ d|v sJ d S )Nr:   r   )rv   INTEGER皙?r  r  皙@rm  r  rn  r  r  )r0  r:   rv   r   r   r  r@   )r  rv   r;   float_framer  s        r=   test_get_schema_dtypesz"_TestSQLApi.test_get_schema_dtypes  s    9$$******EEEsCjSz B BCC^TYsEl
 
 

 :%%%%J&&&&&&r?   c                    t          ddgddgd          }t          j        |d| j        d          }d	}||v sJ t          j        |d| j        d
dg          }d}||v sJ d S )Nr  r  r  r  )Col1Col2r  r  )rF  r   z'CONSTRAINT test_pk PRIMARY KEY ("Col1")r   r   z)CONSTRAINT test_pk PRIMARY KEY ("A", "B"))r   r   r  r@   )r  r   r   r  constraint_sentences        r=   test_get_schema_keysz _TestSQLApi.test_get_schema_keys  s    C:SzBBCC^E6tyvNNN
G"j0000 ^KTYcSVZXXX
I"j000000r?   c                   t          t          j                            dd          t	          d                    }|                    d| j        d           t          j        d| j                  }t                      }d	}g d
}t          j        d| j        d          D ]5}t          ||gd          }t          |          ||         k    sJ |dz  }6t          j        ||           | j        dk    r}t                      }d	}g d
}t          j        d| j        d          D ]5}t          ||gd          }t          |          ||         k    sJ |dz  }6t          j        ||           d S d S )N   r   abcder   test_chunksizeFro  zselect * from test_chunksizer   )r   r   r   r   r,  rB  Tignore_indexr   r:   )r   r   randomrandnlistr	  r@   r   r"   r   r)  r   rp  r0  r#   )r  r   rs  rt  isizeschunkres3s           r=   test_chunksize_readz_TestSQLApi.test_chunksize_read  s   ryr1--tG}}EEE
		"DIU	;;; !"@$)LL {{'*DI
 
 
 	 	E 4-d;;;Du::q))))FAA
dD))) 9$$;;DA#OOE+,<diSTUUU  tUm$???5zzU1X----Q!$----- %$r?   c                .   t          g dg dd          }|                                }|d                             d          |d<   |                    d| j        d           t          j        d	| j                  }t          j        ||           d S )
Nrh  )John P. Doez	Jane Dover  )	person_idperson_namer  categorytest_categoricalFro  zSELECT * FROM test_categorical)	r   copyr   r	  r@   r   r"   r   rp  )r  r   df2r  s       r=   r  z_TestSQLApi.test_categorical  s     &YYJJJ 
 
 ggii /66zBBM

%ty
>>> !A49MM
c2&&&&&r?   c                r    t          ddgddggddg          }|                    d| j        d	
           d S )Nr   r,  ri  r     érn  r   test_unicodeFro  )r   r	  r@   rV  s     r=   test_unicode_column_namez$_TestSQLApi.test_unicode_column_name  sE    AA'&#???
		.$)5	99999r?   c                    t          g ddt          j        dgd          }|                    d| j        d           t          j        d| j                  }t          j        ||           d S )	Nr   r   r,  r   r  r  zd1187b08-4943-4c8d-a7f6Fro  z'SELECT * FROM `d1187b08-4943-4c8d-a7f6`)	r   r   nanr	  r@   r   r"   r   rp  r  r   r  s      r=   test_escaped_table_namez#_TestSQLApi.test_escaped_table_name  sm    YYYc263-?@@AA
		+TYe	DDD !JDIVV
c2&&&&&r?   c                   t          g dg ddd          }|                    d| j        d           t          j        d| j                  }t          g d	g d
g dgg d          }t          j        ||           d S )Nrh  rj  r   r  rn  r  
test_tableFro  z*SELECT a, b, a +1 as a, c FROM test_table;)r   rk  r,  r   )r,  r   ri  r   )ri  rl  r  r   )r  rn  r  r  r   )r   r	  r@   r  r<  r   rp  )r  r   r  r  s       r=   test_read_sql_duplicate_columnsz+_TestSQLApi.test_read_sql_duplicate_columns  s    YYY___1EEFF
		,		777I49UU^^^^^^^^<(((
 
 
 	fh/////r?   )0r  r  r  r  r  __annotations__r   fixturer$  r"  r(  r,  r+  r1  r5  r8  r;  rC  rG  rI  rL  rW  markparametrizer   r<  r"   r#   r^  ra  rd  rh  rs  r}  r  r  r   r  r  r  r  r  r  r  r  r  r  r  rW   r?   r=   r  r    s=           FIIIV^D!!!& & "!&- - -% % %A A A7 7 7P P P	' 	' 	'' ' '3 3 30 0 0	3 	3 	3	3 	3 	3C C C5
 5
 5
n [W&C&C&CDD[\02LM\7\3"%*
 <9		
 4 4  ED4 C C CG G G@ @ @ [)	
 	
 	
 ", ,# ",7 7 7rA A A [E""		
 
0 
0 
0W W W& & &2 2 2
' ' '	1 	1 	1 .  .  .D' ' '": : :
' ' '
0 
0 
0 
0 
0r?   r  zSQLAlchemy not installedreasonc                     e Zd ZdZdZdZed             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zej                            ddddddddddddddde ej        e          j        dk    rdndfg          d             Zej                            dd d!g          d"             Zd# Z ej        d$          d%             Zd& Zd' Zd( Zd)S )*
TestSQLApiz
    Test the public API as it would be used directly

    Tests for `read_sql_table` are included here, as this is specific for the
    sqlalchemy mode.

    r$   r:   c                8    t          j        d          | _        d S Nzsqlite:///:memory:r:   r   r   r  s    r=   setup_classzTestSQLApi.setup_class      -.BCC


r?   c                    t          j        |d| j                   ddg}t          j        d| j        |          }|j                                        |k    sJ d S )Nr&  r   r   r   )r   r	  r@   r#   r   rU  )r  r   colsr  s       r=   test_read_table_columnsz"TestSQLApi.test_read_table_columns  s_    
;di888Sz#L$)TJJJ~$$&&$......r?   c                   t          j        |d| j                   t          j        d| j        d          }|j        j        dgk    sJ t          j        d| j        ddg          }|j        j        ddgk    sJ t          j        d| j        ddgddg          }|j        j        ddgk    sJ |j                                        ddgk    sJ d S )	Nr&  r   r  r   r   r   r   )r`  r   )r   r	  r@   r#   r   r{  r   rU  r  s      r=   test_read_table_index_colz$TestSQLApi.test_read_table_index_col  s    
;di888#L$)wOOO|!gY....#L$)SzRRR|!c3Z////#$)SzC:
 
 
 |!c3Z////~$$&&3*444444r?   c                *   t          j        d| j                  }t          j        d| j                  }t	          j        ||           t          j        d| j                  }t          j        d| j                  }t	          j        ||           d S )Nr9  r3   )r   r"   r@   r<  r   rp  r#   )r  iris_frame1iris_frame2s      r=   test_read_sql_delegatez!TestSQLApi.test_read_sql_delegate  s~    ()=tyIIl#7CC
k;777(;;l64955
k;77777r?   c                   ddl m} ddlm}  |d           |d          g}|D ]}t	          | j        |          rs| j                                        5 }|                                5  |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | j                                        5  | j                            |           d d d            n# 1 swxY w Y   t          j
        d           5  t          j        d| j                   t          j        d| j                   d d d            d S # 1 swxY w Y   d S )Nr   rm   rT   z,CREATE TABLE invalid (x INTEGER, y UNKNOWN);z0CREATE TABLE other_table (x INTEGER, y INTEGER);other_tablezSELECT * FROM other_table)r:   rn   rc   rU   re   r@   rf   rg   rG   r   r  r   r#   r"   )r  rn   rU   
query_listrS  r@   s         r=   test_not_reflect_all_tablesz&TestSQLApi.test_not_reflect_all_tables  s   ######,,,,,, D?@@DCDD

   	- 	-E$)V,, -Y&&(( ,D , ,U+++, , , , , , , , , , , , , , ,, , , , , , , , , , , , , , , Y__&& - -I%%e,,,- - - - - - - - - - - - - - - '-- 	G 	G}di888:DIFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	GsZ   B#*B B#BB#BB##B'	*B'	C//C3	6C3	5EEEc                V   t          j        t          d          5  t          j        | j                                      dd           d d d            n# 1 swxY w Y   t          j        d           5  |                    d| j                   d d d            d S # 1 swxY w Y   d S )NzThe 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  TABLE1 CaseSensitive)r   r  r  r   r   r@   check_case_sensitiver	  r  s     r=   (test_warning_case_insensitive_table_namez3TestSQLApi.test_warning_case_insensitive_table_name0  s<   'N
 
 
 	J 	J ODI&&;;HbIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J '-- 	; 	;	:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s#   .AAA5BB"%B"c                    ddl m} |j                            | j                  }|                    d          }d |D             }|S )Nr   )
reflectiontest_index_savedc                    g | ]
}|d          S column_namesrW   r[   r  s     r=   r^   z1TestSQLApi._get_index_columns.<locals>.<listcomp>E      ...Qq ...r?   )rc   r  	Inspectorfrom_enginer@   get_indexes)r  tbl_namer  r   ixss        r=   r  zTestSQLApi._get_index_columns@  sX    000000#//	::122..#...
r?   c                   ddl m} t          dt          ddgd          i          }t	          j        | j                  }t	          j        d||	          }t          |j	        j
        d         j        |          sJ d S )
Nr   )	TIMESTAMPr   2014-12-12 01:542014-12-11 02:54Tutc	test_typer   )r:   r  r   r   r   r   r@   SQLTablere   r]  r  r   )r  r  r   rR  r]  s        r=   test_sqlalchemy_type_mappingz'TestSQLApi.test_sqlalchemy_type_mappingH  s    (((((( ["46H!ItTTTU
 
 _TY''["B777%+-/4i@@@@@@@r?   zinteger, expected)int8SMALLINT)Int8r  )uint8r  )UInt8r  )int16r  )Int16r  )uint16r  )UInt16r  )int32r  )Int32r  )uint32BIGINT)UInt32r  )r   r  )Int64r  r   r  r  c                    t          ddgdg|          }t          j        | j                  }t          j        d||          }t          |j        j        j        j	                  }||k    sJ d S )Nr   r   r  r   r;   r  r  )
r   r   r   r@   r  r+   r]  r  r  r   )r  re  r  r   rR  r]  r  s          r=   test_sqlalchemy_integer_mappingz*TestSQLApi.test_sqlalchemy_integer_mappingT  sr    , 1vuG<<<_TY''["B777U[]_)**!!!!!!r?   re  uint64UInt64c                    t          ddgdg|          }t          j        | j                  }t	          j        t          d          5  t          j        d||           d d d            d S # 1 swxY w Y   d S )	Nr   r   r  r  z1Unsigned 64 bit integer datatype is not supportedr  r  r  )r   r   r   r@   r   r4  r5  r  )r  re  r   rR  s       r=   (test_sqlalchemy_integer_overload_mappingz3TestSQLApi.test_sqlalchemy_integer_overload_mappingq  s     1vuG<<<_TY'']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 	4s   
A//A36A3c                   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   r3   r  Fr  r9  )r   r   r	  r   r<  r#   r"   rp  )	r  r   r   db_urir]  r/  r   rS  r7  s	            r=   test_database_uri_stringz#TestSQLApi.test_database_uri_string{  s   
 _ 	<$!D(FEuf	OOO,uf55K,UF;;K(E,UF;;K	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	k;777
k;777
k;77777s   A"BB	Bpg8000c                    d}t          j        t          d          5  t          j        d|           d d d            d S # 1 swxY w Y   d S )Nz)postgresql+pg8000://user:pass@host/dbnamer  r  zselect * from tabler   r4  ImportErrorr   r<  )r  r  s     r=   (test_pg8000_sqlalchemy_passthrough_errorz3TestSQLApi.test_pg8000_sqlalchemy_passthrough_error  s     =];h777 	8 	8L.777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   AAAc                    ddl m}  |d          }t          j        || j        ddi          }t          |d                   }|dhk    sJ d S )Nr   rm   z#select * from iris where name=:namer   zIris-versicolorrJ  r8   )r:   rn   r   r<  r@   set)r  rn   	name_textiris_df	all_namess        r=   test_query_by_text_objz!TestSQLApi.test_query_by_text_obj  sn    ######D>??	,y$)VEV<WXXX((	.///////r?   c                    ddl m}m} t          | j                  } ||                              |j        j         |d          k              }t          j	        || j
        ddi          }t          |d                   }|dhk    sJ d S )Nr   )	bindparamrF  r   r   rJ  r8   )r:   r!  rF  r>   r  wherer  r8   r   r<  r@   r  )r  r!  rF  r3   name_selectr  r  s          r=   test_query_by_select_objz#TestSQLApi.test_query_by_select_obj  s    	
 	
 	
 	
 	
 	
 	
 	

 #4;//fTll((		&8I8I)IJJ,{DIv}>UVVV((	]O++++++r?   c                    t          g dg dd          }|                    d| j        d           t          j        d| j                  }t          j        ||           d S )Nr  ri  r  r   )r   z%_variationtest_column_percentageFro  r   r	  r@   r   r#   r   rp  r  s      r=   test_column_with_percentagez&TestSQLApi.test_column_with_percentage  sh    YYYyyyAABB
		*DIU	CCC !949EE
c2&&&&&r?   N)r  r  r  r  r  r0  r  r  r  r  r  r  r  r  r  r   r  r  r  r   r;   r   r  r  r  tdskip_if_installedr  r  r$  r)  rW   r?   r=   r  r    s         FDD D [D/ / /5 5 5 8 8 8G G G,; ; ;   
A 
A 
A [  !!!!!!    hbhsmm0G;;((K	
 (" ") (" [Y8(<==4 4 >=48 8 8" R(##8 8 $#80 0 0, , ,' ' ' ' 'r?   r  c                      e Zd ZdZdZdZddZd Zej	        
                    ed          d	             Zej	        
                    ed          d
             Zd Zd Zd Zd ZdS )TestSQLiteFallbackApiz9
    Test the public sqlite connection fallback API

    r$   r[  r   c                *    t          j        |          S r   r  )r  databases     r=   rf   zTestSQLiteFallbackApi.connect  s    x(((r?   c                   t          j                    5 }t          |                     |                    5 }t	          j        |d|d          dk    sJ 	 d d d            n# 1 swxY w Y   t          |                     |                    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_legacyFro  r  z!SELECT * FROM test_frame3_legacy;)r   r   r   rf   r   r	  r"   rp  )r  r   r   r@   r  s        r=   test_sql_open_closez)TestSQLiteFallbackApi.test_sql_open_close  s    _ 	W$d++,, J{,@$eTTT                   d++,, W+,OQUVVW W W W W W W W W W W W W W W	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	k622222sX   #C	A#C	#A'	'C	*A'	+%C	B2&C	2B6	6C	9B6	:C		CCzSQLAlchemy is installedr  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  r9  r  )r  r@   r6  s      r=   test_con_string_import_errorz2TestSQLiteFallbackApi.test_con_string_import_error  s    .=];c222 	5 	5L-t444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   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 )~TestSQLiteFallbackApi.test_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnectionreturnNonec                2    t          j        |i || _        d S r   )ro   rp   r@   )r  argskwargss      r=   __init__zTestSQLiteFallbackApi.test_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__init__  s    #.???			r?   c                ,    t          | j        |          S r   )getattrr@   )r  r   s     r=   __getattr__zTestSQLiteFallbackApi.test_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__getattr__  s    ty$///r?   c                8    | j                                          d S r   )r@   r  r  s    r=   r  zTestSQLiteFallbackApi.test_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.close  s    	!!!!!r?   N)r8  r9  )r  r  r  r=  r@  r  rW   r?   r=   MockSqliteConnectionr7    sJ        @ @ @ @0 0 0" " " " "r?   rB  r   zSELECT 1)r   r   r   r  r  r   r<  )r  rB  r@   s      r=   Jtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installedz`TestSQLiteFallbackApi.test_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed  s"   	" 	" 	" 	" 	" 	" 	" 	"  4 4Z @ @AA 	/T+K88 / /Z.../ / / / / / / / / / / / / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s5   A?A'A?'A+	+A?.A+	/A??BBc                B   t          j        d| j                  }t          j        d| j                  }t	          j        ||           d}t          j        t           j        |          5  t          j        d| j                   d d d            d S # 1 swxY w Y   d S )Nr9  z9Execution failed on sql 'iris': near "iris": syntax errorr  r3   )	r   r"   r@   r<  r   rp  r   r4  DatabaseError)r  r  r  r6  s       r=   r  z,TestSQLiteFallbackApi.test_read_sql_delegate  s    ()=tyIIl#7CC
k;777K]3,C888 	, 	,L+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   ,BBBc                <    t          j        |d          }d|v sJ d S )Nr  r  )r   r  r  s      r=   test_get_schema2z&TestSQLiteFallbackApi.test_get_schema2  s*    ^K88
:%%%%%%r?   c                    |                     d          D ]O}|                                 d                             d          |k    r|                                 d         c S Pt          d| d          )N
r   rz  r   zColumn 
 not found)splitstripr5  )r  r  columncols       r=   _get_sqlite_column_typez-TestSQLiteFallbackApi._get_sqlite_column_type  sy    <<%% 	& 	&Cyy{{1~##C((F22yy{{1~%%% 356555666r?   c                
   t          dt          ddgd          i          }t          j        | j                  }t          j        d||          }|                                }|                     |d          dk    sJ d S )	Nr   r  r  Tr  r  r  r  )r   r   r   r   r@   SQLiteTable
sql_schemarO  )r  r   rR  r]  r  s        r=   test_sqlite_type_mappingz.TestSQLiteFallbackApi.test_sqlite_type_mapping  s    ["46H!ItTTTU
 
 	**Rr:::!!##++FF;;{JJJJJJr?   N)r   )r  r  r  r  r  r0  rf   r2  r   r  skipifSQLALCHEMY_INSTALLEDr4  rC  r  rG  rO  rS  rW   r?   r=   r-  r-    s         
 FD) ) ) )3 3 3  [,5NOO5 5 PO5 [,5NOO/ / PO/", , ,& & &
7 7 7K K K K Kr?   r-  c                     e Zd ZU dZded<   ed             Z ej        d          d             Z	ed             Z
ed	             Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-ej.        /                    d,d-e0j1        gid-e0j1         gie0j1         gd.gd/g          d0             Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8ej.        /                    d7d8d9g          d:             Z9ej.        /                    d7d8d;g          d<             Z:ej.        /                    d7g d=          d>             Z;dHdAZ<dHdBZ=dC Z>ej.        /                    dDe?j@        dEg          ej.        /                    d7d8d9g          dF                         ZAdGS )I_TestSQLAlchemyz
    Base class for testing the sqlalchemy backend.

    Subclasses for specific database types are created below. Tests that
    deviate for each flavor are overwritten there.

    r+   r  c                V    |                                   |                                  d S r   )setup_driversetup_enginer  s    r=   r  z_TestSQLAlchemy.setup_class  s,    r?   Tr  c                D   	 | j                                         | _        t          j        | j                  | _        n7# t          j        j        $ r  t          j
        d| j         d           Y nw xY w|                     |           |                     |           d S )NzCan't connect to z server)r   rf   r@   r   r   r*  r:   r  r  r   skipr  r  r  r#  s      r=   r$  z_TestSQLAlchemy.setup_method  s    	B++--DI _TY77DNN~. 	B 	B 	BK@DK@@@AAAAA	BI&&&Z(((((s   <? 1A32A3c                    t                      r   NotImplementedErrorr  s    r=   rY  z_TestSQLAlchemy.setup_driver'      !###r?   c                    t                      r   r^  r  s    r=   rZ  z_TestSQLAlchemy.setup_engine+  r`  r?   c                .    |                                   d S r   r  r  s    r=   test_read_sql_parameterz'_TestSQLAlchemy.test_read_sql_parameter/      %%'''''r?   c                .    |                                   d S r   r  r  s    r=   test_read_sql_named_parameterz-_TestSQLAlchemy.test_read_sql_named_parameter2      ++-----r?   c                0    |                      |           d S r   r  r  s     r=   test_to_sql_emptyz!_TestSQLAlchemy.test_to_sql_empty5      ;'''''r?   c                @   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 d S )
Nr   r        ?       @      @      @rs  rr  rq  rp  onetwoTr$  rr  r  )r:   r   rf   r   r   r   r	  r   r  r   	temp_connrr  r*  r   s         r=   test_create_tablez!_TestSQLAlchemy.test_create_table8  s   &&&&&&LLNN	(((1E1E1EFF
 

 _Y>>> 	C)##J==BBBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C wy!!~~l+++++++s   A11A58A5c                   ddl m} |                                 }t          g dg dd          }t	          j        |          }|                    |d          dk    sJ  ||          }|                    d          sJ |                    d           	 |	                                 n# t          $ r Y nw xY w|                    d          rJ d S )Nr   r  ro  rt  ru  rr  r  )r:   r   rf   r   r   r   r	  r   r  clear_cacheAttributeErrorrx  s         r=   test_drop_tablez_TestSQLAlchemy.test_drop_tableE  s   &&&&&&LLNN	(((1E1E1EFF
 

 OI..	
L99Q>>>>wy!!~~l+++++\***	 	 	 	D	>>,///////s   B. .
B;:B;c                0    |                      |           d S r   r  r  s     r=   rG  z_TestSQLAlchemy.test_roundtripY      $$$$$r?   c                .    |                                   d S r   r  r  s    r=   rL  z _TestSQLAlchemy.test_execute_sql\      r?   c                Z    t          j        d| j                  }t          |           d S )Nr3   rE  )r   r#   r@   r   r'  s     r=   test_read_tablez_TestSQLAlchemy.test_read_table_  s-    'DI>>>
$$$$$r?   c                    t          j        d| j        ddg          }t          j        |j        j        ddg           d S )Nr3   r4   )rF  r   )r   r#   r@   r   r   r   rd   r'  s     r=   r  z'_TestSQLAlchemy.test_read_table_columnsc  sM    '	M=+I
 
 

 	+2]M4RSSSSSr?   c                    d}t          j        t          |          5  t          j        d| j                   d d d            d S # 1 swxY w Y   d S )Nz!Table this_doesnt_exist not foundr  this_doesnt_existrE  )r   r4  r5  r   r#   r@   )r  r6  s     r=   test_read_table_absent_raisesz-_TestSQLAlchemy.test_read_table_absent_raisesi  s    1]:S111 	C 	C2	BBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   AAAc                   t          j        d| 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          j                  sJ t          |j        j        j        t                    sJ d S rd  )r   r#   r@   r   r|   r;   r   r   r   r}   re  r~   bool_r   r   objectrV  s     r=   rf  z,_TestSQLAlchemy.test_default_type_conversionn  s    33"++0"+>>>>>")/.
;;;;;"**/::::: "+16DDDDD",27@@@@@@@r?   c                    t          ddgi          }|                    d| j        d          dk    sJ t          j        d| j                  }t          j        ||           d S )Ni64l            )r   test_bigintFro  r   r(  r  s      r=   r  z_TestSQLAlchemy.test_bigintz  sk    UUG,---yy	y??1DDDD#M49==
b&)))))r?   c                    t          j        d| j                  }t          |j        j        j        t          j                  sJ d S rd  	r   r#   r@   r   ry   r;   r   r   rT  rV  s     r=   test_default_date_loadz&_TestSQLAlchemy.test_default_date_load  s>    33 "**/???????r?   c           	     6   d }t          d| j                  }t          |d          s8|j                            t
          j                            d                     |j        }t          |j
                  sJ t          d| j        dg          }t          |d          s8|j                            t
          j                            d                     |j        }t          |j
                  sJ t          |j        j                  dk    sJ  ||j                   t          t          t          d| j        d	                    d
          }|j        }t          |j
                  sJ t          |j        j                  dk    sJ t!          j        d| j                  }|j        }t          |j
                  sJ t%          j        |j        |j                   t!          j        d| j                  } ||j                   d S )Nc                   t          | j                  r8| d         t          d          k    sJ | d         t          d          k    sJ d S t          | j                  rnt	          | j        j                  dk    sJ t          dd          t          dd          g}t          || j                  }t          j
        | |           d S t          d| j                   )	Nr   z2000-01-01 08:00:00r   z2000-06-01 07:00:00UTC)tzr   z&DateCol loaded with incorrect type -> )r   r;   r   r   r+   dtr  r   r   r   re  AssertionError)rN  expected_datar  s      r=   r`  z:_TestSQLAlchemy.test_datetime_with_timezone.<locals>.check  s    #39--  1v+@!A!AAAAA 1v+@!A!AAAAAAA&sy11 369~~.... 3>>>3>>>! "-ch???&sH55555 %HSYHH  r?   zselect * from typesr   z&no column with datetime with time zoner  rO  r  r   rB  Tr  rw   )r"   r@   r  node
add_markerr   r  xfailr   r   r;   r+   r  r  r   r  r   r#   r   re  )r  r
  r`  r   rN  r  s         r=   test_datetime_with_timezonez+_TestSQLAlchemy.test_datetime_with_timezone  s%   
	 	 	B 149==r?++ 	L##!!)Q!RR   $SY/////!49?:K
 
 
 r?++ 	L##!!)Q!RR   $SY/////369~~&&&&b 5tyANNNOO
 
 
 $SY/////369~~&&&&%gty99$$SY/////
r/1GHHH 33br?   c                x   t          dt          ddd          i          }|                    d| j        d          dk    sJ | j        d	k    r$|d         j                            d
          |d<   n#|d         j                            d           |d<   t          j	        d| j                  }t          j        ||           t          j        d| j                  }| j        dk    r:t          |j        d         t                    sJ t!          |d                   |d<   t          j        ||           d S )Nr   2013-01-01 09:00:00ri  
US/Pacificperiodsr  test_datetime_tzFro  r&   r  zSELECT * FROM test_datetime_tzr$   r   r   )r   r   r	  r@   r  r  
tz_converttz_localizer   r#   r   rp  r"   re   locr+   r   )r  r  r  s      r=   %test_datetime_with_timezone_roundtripz5_TestSQLAlchemy.test_datetime_with_timezone_roundtrip  s5   
 *2A,OOOP
 
 149EJJaOOOO;,&&$SM,77>>HSMM %SM,88>>HSM#$6	BB
fh///#$DdiPP;(""fj0#66666%fSk22F3K
fh/////r?   c                *   t          dt          ddd          idg          }|                    d| j        d          dk    sJ t	          j        d| j                  }t          t          j        gdg          }t          j	        ||           d S )	Nr   i'  r   r   ro  test_datetime_obbFr   )
r   r   r	  r@   r   r#   r  NaTr   rp  )r  r   r  r  s       r=   test_out_of_bounds_datetimez+_TestSQLAlchemy.test_out_of_bounds_datetime  s    &(4A"6"67sCCC{{.	{GG1LLLL#$7CCbfXx888
fh/////r?   c                <   t          ddd                              d           }t          dt          d          i|          }|                    d| j        d	          dk    sJ t          j        d| j        d
          }t          j	        ||d           d S )Nz
2018-01-01r   6H)r  freqnumsro  	foo_table	info_datero  r  F)check_names)
r   
_with_freqr   rq  r	  r@   r   r#   r   rp  )r  datesr  r  s       r=   "test_naive_datetimeindex_roundtripz2_TestSQLAlchemy.test_naive_datetimeindex_roundtrip  s     <>>>II$OOfeAhh/u==={DI;OOSTTTTT#KkRRR
fhEBBBBBBr?   c                (   t          j        d| j                  }| j        dk    rt          nt
          j        }t          |j        j	        j
        |          sJ t          j        d| j        dg          }t          |j        j	        j
        t
          j                  sJ t          j        d| j        ddi          }t          |j        j	        j
        t
          j                  sJ t          j        d| j        dddii          }t          |j        j	        j
        t
          j                  sJ t          j        d| j        dg          }t          |j        j	        j
        t
          j                  sJ t          j        d| j        ddi          }t          |j        j	        j
        t
          j                  sJ t          j        d| j        dd	dii          }t          |j        j	        j
        t
          j                  sJ d S )
Nrw   r$   ry   rO  rQ  formatrz   rA  unit)r   r#   r@   r  r  r   rT  r   ry   r;   r   rz   )r  r   expected_types      r=   rW  z!_TestSQLAlchemy.test_date_parsing  s   33"&+"9"9r}"**/?????LLL"**/?????TYY8K,L
 
 
 "**/?????I"X/B$CD
 
 

 "**/?????OOO"--2BMBBBBBs@STTT"--2BMBBBBBTY\FC=,I
 
 
 "--2BMBBBBBBBr?   c                ~   t          t          dd          t          j        d          d          }|                    d| j                  dk    sJ t          j        d| j                  }|                    dd	          }t          j
        ||           t          j        d
| j                  }|                    dd	          }| j        dk    rQt          |j        d         t                    sJ t!          |d                   |d<   t          j
        ||           d S t          j
        ||           d S )Nr  ri  r  rr  r  test_datetimer   r   )axisSELECT * FROM test_datetimer$   r  r   )r   r   r   r?  r	  r@   r   r#   rh   r   rp  r"   r  re   r  r+   r   r  s      r=   r  z_TestSQLAlchemy.test_datetime%  s0   2A>>>RYs^^TT
 
 yy$)449999 #OTY??W1--
fb))) #$A49MMW1--;(""fj0#66666%fSk22F3K!&"-----!&"-----r?   c                R   t          t          dd          t          j        d          d          }t          j        |j        d<   |                    d| j        d	          dk    sJ t          j	        d| j                  }t          j        ||           t          j        d
| j                  }| j        dk    rSt          |j        d         t                    sJ t!          |d         d          |d<   t          j        ||           d S t          j        ||           d S )Nr  ri  r  rr  r  r   r   r  Fro  r  r$   r  r   rZ  )r]  )r   r   r   r?  r  r  r	  r@   r   r#   r   rp  r"   r  re   r+   r   r  s      r=   test_datetime_NaTz!_TestSQLAlchemy.test_datetime_NaT:  s   2A>>>RYs^^TT
 
 vyy$)5yAAQFFFF #OTY??
fb))) #$A49MM;(""fj0#66666%fSk(CCCF3K!&"-----!&"-----r?   c                >   t          t          ddd          t          ddd          gdg          }|                    d| j        d          dk    sJ t	          d| j                  }|d         }t          |d                   }t          j        ||           d S )	N  r   r,  r  r   	test_dateFro  )r   r   r	  r@   r#   r   r   re  )r  r   r  r  r  s        r=   test_datetime_datez"_TestSQLAlchemy.test_datetime_dateN  s    T1a(($tQ*:*:;cUKKKyydiuy==BBBB[$)44Sr#w''
vx00000r?   c                   t          t          ddd          t          ddd          gdg          }|                    d| j        d	          d
k    sJ t	          d| j                  }t          j        ||           |}t          j        |d|d	          d
k    sJ t          j        d|          }|	                    d           }t          j        ||           t          j        |d| j        d	          d
k    sJ | j
        dk    rEt          j        d| j                  }|	                    d           }t          j        ||           t          j        d| j                  }t          j        ||           d S )N	   r   r      r  r   	test_timeFro  r,  
test_time2zSELECT * FROM test_time2c                ,    |                      d          S Nz%H:%M:%S.%fstrftime_s    r=   <lambda>z4_TestSQLAlchemy.test_datetime_time.<locals>.<lambda>d  s    AJJ}$=$= r?   
test_time3r$   zSELECT * FROM test_time3c                ,    |                      d          S r  r  r  s    r=   r  z4_TestSQLAlchemy.test_datetime_time.<locals>.<lambda>j  s    

=(A(A r?   )r   r   r	  r@   r#   r   rp  r   r"   applymapr  )r  r   r   r  r   refs         r=   test_datetime_timez"_TestSQLAlchemy.test_datetime_timeX  s{   Q1tAq"~~6FFFyydiuy==BBBB[$)44
c2&&& %z"lKuEEEJJJJ !;[IIkk==>>
c3'''z"lDIUCCCqHHHH;(""$%?KKC++AABBC!#s+++ ty99
b#&&&&&r?   c                @   t          dt          j                  }t          dt          j                  }t	          ||d          }|                    d| j        d          dk    sJ t          j        d| j                  }t          j
        ||dd	
           d S )Ni  r  g        )s1rB  test_read_writeFro  r   T)check_dtypecheck_exact)r   r   r  float32r   r	  r@   r   r#   r   rp  )r  r  rB  r   r  s        r=   test_mixed_dtype_insertz'_TestSQLAlchemy.test_mixed_dtype_inserto  s    IRX...Crz***b++,, yy*DIUyCCqHHHH !2DI>>
b#5dKKKKKKr?   c                J   t          g ddt          j        dgd          }|                    d| j        d          dk    sJ t          j        d| j                  }t          j        ||           t          j	        d	| j                  }t          j        ||           d S )
Nr  r   r  r  test_nanFro  ri  SELECT * FROM test_nan)
r   r   r  r	  r@   r   r#   r   rp  r"   r  s      r=   test_nan_numericz _TestSQLAlchemy.test_nan_numeric{  s    YYYc263-?@@AAyyTYey<<AAAA #J	::
fb))) #$<diHH
fb)))))r?   c                   t          g dt          j        t          j        t          j        gd          }|                    d| j        d          dk    sJ t          j        d| j                  }t          j        ||           |d         	                    d          |d<   d |d<   t          j
        d	| j                  }t          j        ||           d S )
Nr  r  r  Fro  ri  r   r  r  )r   r   r  r	  r@   r   r#   r   rp  r   r"   r  s      r=   test_nan_fullcolumnz#_TestSQLAlchemy.test_nan_fullcolumn  s    YYYbfbfbf-EFFGGyyTYey<<AAAA #J	::
fb))) S'..**33#$<diHH
fb)))))r?   c                ^   t          g dddt          j        gd          }|                    d| j        d          dk    sJ d |j        d	<   t          j        d| j                  }t          j	        ||           t          j
        d
| j                  }t          j	        ||           d S )Nr  r  rn  r  r  Fro  ri  r,  r   r  )r   r   r  r	  r@   r  r   r#   r   rp  r"   r  s      r=   test_nan_stringz_TestSQLAlchemy.test_nan_string  s    YYYc3-?@@AAyyTYey<<AAAA v #J	::
fb))) #$<diHH
fb)))))r?   c                t    ddl m}  || j                  }|                    |          }d |D             }|S )Nr   r  c                    g | ]
}|d          S r  rW   r  s     r=   r^   z6_TestSQLAlchemy._get_index_columns.<locals>.<listcomp>  r  r?   )r:   r   r@   r  )r  r  r   r   r  s        r=   r  z"_TestSQLAlchemy._get_index_columns  sP    &&&&&&wty!!x((..#...
r?   c                .    |                                   d S r   r  r  s    r=   test_to_sql_save_indexz&_TestSQLAlchemy.test_to_sql_save_index      !!!!!r?   c                .    |                                   d S r   r  r  s    r=   test_transactionsz!_TestSQLAlchemy.test_transactions           r?   c                   ddl m} ddlm} d}t	          j        ||| j                  }|j        d d         }|                     || j                    ||          }t          | j        |          rs| j        
                                5 }|                                5  |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   nK| j                                        5  | j                            |           d d d            n# 1 swxY w Y   t	          j        || j                  }t          j        ||d           |                     || j                   d S )Nr   rm   rT   test_get_schema_create_tablerE  Fr  )r:   rn   rc   rU   r   r  r@   r   r  re   rf   rg   rG   r#   r   rp  )	r  r   rn   rU   r  r  blank_test_dfr@   returned_dfs	            r=   r  z,_TestSQLAlchemy.test_get_schema_create_table  s2    	$#####,,,,,,,^K$)DDD
#(!,TY'''T*%%
di(( 	.""$$ -ZZ\\ - -LL,,,- - - - - - - - - - - - - - -- - - - - - - - - - - - - - - "" . .	!!*---. . . . . . . . . . . . . . .(di88
k=5QQQQTY'''''sH   C#C9CC			CC		CC #C D((D,/D,c                |   ddl m}m} ddlm} ddg}ddg}t          ||          }|                    d	| j                  d
k    sJ |                    d| j        d|i          d
k    sJ  |            }|                    | j                   |j	        d         j
        d         j        }t          ||          sJ d}	t          j        t          |	          5  |                    d| j        dt           i           d d d            n# 1 swxY w Y   |                    d| j        d |d          i          d
k    sJ |                    | j                   |j	        d         j
        d         j        }t          ||          sJ |j        dk    sJ |                    d| j        |          d
k    sJ |                    | j                   |j	        d         j
        d         j        }
|j	        d         j
        d         j        }t          |
|          sJ t          ||          sJ d S )Nr   )rs   r1   r0   r   r   g?Tg?Nr   
dtype_testr,  dtype_test2r  ra   z&The type of B is not a SQLAlchemy typer  r  dtype_test3
   single_dtype_test)r:   rs   r1   sqlalchemy.schemar0   r   r	  r@   reflecttablesr   r   re   r   r4  r5  r+   rI  )r  rs   r1   r0   r  r   r   metasqltyper6  sqltypeasqltypebs               r=   
test_dtypez_TestSQLAlchemy.test_dtype  s   	
 	
 	
 	
 	
 	
 	
 	
 	/.....Sz[)tT***yyty11Q6666yy	#tyEEJJJJxzz$)$$$+m,4S9>'4(((((6]:S111 	< 	<IIgtyc
I;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< yy	#vvbzz9JyKKqPPPP$)$$$+m,4S9>'6*****~#### yy,dityDDIIII$)$$$;23;C@E;23;C@E(D)))))(D)))))))s   %DDDc                   ddl m}m}m}m} ddlm} t          dd g          t          t          ddd          d g          t          dd gd	          t          d
d g          d}t          |          }d}|
                    || j                  dk    sJ t          j        || j                  }	 |            }
|
                    | j                   | j        dk    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 )Nr   )rt   ru   r/   rv   r  T  r   r   r  r  r  BoolDateIntr/   notna_dtype_testr,  ra   r%   r  r  r  r/   )r:   rt   ru   r/   rv   r   r0   r   r   r   r	  r@   r   r#   r  r  r  r   re   r   )r  rt   ru   r/   rv   r0   r  r   r  r  r  my_typecol_dicts                r=   test_notna_dtypez _TestSQLAlchemy.test_notna_dtype  s   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	/..... D$<((HT1a00$7881d)8444S$K((	
 
 t__ yydi((A----sDI..xzz$)$$$![G33'';s#+(6*/99999(6*/:::::(5/.88888(7+0%8888888r?   c           
        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| j	        ddd |d          i          dk    sJ t          j        d| j	                  }t          j        |d         j        d         d          t          j        |d         j        d         d          k    sJ  |            }|                    | j	                   |j        d         j        }	t%          |	d         j                  t%          |	d         j                  k    sJ t)          |	d         j        |          sJ t)          |	d         j        |          sJ t)          |	d         j        |          sJ t)          |	d         j        |          sJ d S )Nr   )
BigIntegerr/   rv   r  gYB?r  r  float64r   r  r   )f32f64
f64_as_f32i32r  test_dtypesFr  r     )	precision)r   r  r;   r   r     ra   r  r  r  )r:   r  r/   rv   r   r0   r   r   r	  r@   r   r#   r   roundr   r  r  r   r+   r   re   )
r  r  r/   rv   r0   Vr   r  r  r  s
             r=   test_double_precisionz%_TestSQLAlchemy.test_double_precision	  sG   	
 	
 	
 	
 	
 	
 	
 	
 	
 	

 	/....."qc333qc333$aS	:::qc111qc111 
 
 II	##UUR%8%8%89         	:: x5	q)2.."(3u:?1;Mr2R2RRRRR xzz$)$$$;}-58E?'((C0F0K,L,LLLLL(5/.66666(5/.66666(5/.88888(5/.
;;;;;;;r?   c                    ddl m d d fdfd}t          dg di                              d| j                  d	k    sJ  || j                   d S )
Nr   rT   c                2    d}t          j        ||           S )Nz'SELECT test_foo_data FROM test_foo_datarE  )r   r"   )r~  rS  s     r=   test_selectzC_TestSQLAlchemy.test_connectable_issue_example.<locals>.test_select@	  s    =E%e<<<<r?   c                6    |                     d| d           d S )Ntest_foo_datar  )r   rF  r  )r	  )r~  r   s     r=   test_appendzC_TestSQLAlchemy.test_connectable_issue_example.<locals>.test_appendD	  s     KK_*KQQQQQr?   c                6     |           } | |           d S r   rW   )r@   foo_datar%  r"  s     r=   test_connectablezH_TestSQLAlchemy.test_connectable_issue_example.<locals>.test_connectableG	  s,     #{4((HKh'''''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   )re   rf   rg   )connectabler@   rU   r(  s     r=   mainz<_TestSQLAlchemy.test_connectable_issue_example.<locals>.mainM	  s   +v.. . ((** /d / /((.../ / / / / / / / / / / / / / // / / / / / / / / / / / / / / / / / ! -----s4   A+AA+A	A+A	A++A/2A/r$  r  ri  )rc   rU   r   r	  r@   )r  r+  rU   r%  r(  r"  s     @@@@r=   test_connectable_issue_examplez._TestSQLAlchemy.test_connectable_issue_example;	  s     	-,,,,,	= 	= 	=	R 	R 	R	( 	( 	( 	( 	( 	(	. 	. 	. 	. 	. 	. 			233::?DIVV    	TYr?   inputrc  bar)rc  infe0c                   t          |          }| j        dk    rt          j        d          }t	          |j                  t	          d          k     rCd|j        v r:t          j                            d          }|j	        
                    |           d}t          j        t          |          5  |                    d	| j        d
           d d d            d S # 1 swxY w Y   d S |                    d	| j        d
          dk    sJ t          j        d	| j                  }t#          j        ||           d S )Nr%   r   z1.0.3r/  zGH 36465r  zinf cannot be used with MySQLr  foobarFro  r   )r   r  r   r   r   __version__r   r  r  r  r  r4  r5  r	  r@   r   r#   r   assert_equal)r  r-  r
  r   r   r  r6  r  s           r=   test_to_sql_with_negative_npinfz/_TestSQLAlchemy.test_to_sql_with_negative_npinf[	  sv    u;'!!
 ))44G +,,ww/?/???rz)){((
(;;''---1Cz555 < <		(DIU	;;;< < < < < < < < < < < < < < < < < < 99Xty9>>!CCCC$Xty99COB$$$$$s   4CC#&C#c                p   ddl mmmm} ddlm}m} d}t          d|gi          } |            } G fdd|          } || j	                  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 )
Nr   )r.   rv   UnicoderF  )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 )
7_TestSQLAlchemy.test_temporary_table.<locals>.Temporary	temp_testprefixes	TEMPORARYTprimary_keyr  F)nullableN)r  r  r  __tablename____table_args__idr9  )r.   rv   r6  s   r=   	Temporaryr;  	  sP        'M(;-8NT222B6''"++666DDDr?   rE  )r9  )r   rF  )r:   r.   rv   r6  rF  sqlalchemy.ormr7  r8  r   r@   rg   r~  	__table__ri   addflushr   r"   r9  r   rp  )r  rF  r7  r8  	test_datar  BaserE  sessionr@   r   r.   rv   r6  s              @@@r=   test_temporary_tablez$_TestSQLAlchemy.test_temporary_tablez	  sJ   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
	
 	
 	
 	
 	
 	
 	
 	

 $	fyk233!!	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 WTY 	N7 N N))++#**4000II9555666'FF9>,B,B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 	b(+++++s7   D-BC?3D?D	DD	DDDc                    d}t          j        t          |          5  |                     |d           d d d            d S # 1 swxY w Y   d S )Nz*engine must be one of 'auto', 'sqlalchemy'r  
bad_engine)r   r4  r5  r  r0  s      r=   test_invalid_enginez#_TestSQLAlchemy.test_invalid_engine	  s    :]:S111 	D 	D((lCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   AA	Ac                    t          j        dd          5  |                     |           d d d            d S # 1 swxY w Y   d S )Nio.sql.enginer:   r  option_contextr  r  s     r=   test_options_sqlalchemyz'_TestSQLAlchemy.test_options_sqlalchemy	  s    == 	6 	6((555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6   9= =c                    t          j        dd          5  |                     |           d d d            d S # 1 swxY w Y   d S )NrR  r  rS  r  s     r=   test_options_autoz!_TestSQLAlchemy.test_options_auto	  s    77 	6 	6((555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6rV  c                (   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:   rR  r  )re   r    r   r  rT  r  s    r=   test_options_get_enginez'_TestSQLAlchemy.test_options_get_engine	  s   *\224DEEEEE== 	J 	Jj002BCCCCCj668HIIIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 77 	J 	Jj002BCCCCCj668HIIIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	Js%   A	BBB0A	DDDc                    d S r   rW   r  s    r=   "test_get_engine_auto_error_messagez2_TestSQLAlchemy.test_get_engine_auto_error_message	  	     	r?   funcr<  r"   c                   d}|                                  }|                    || j        dd           t          j        d|          5   t          t          |          d| | j        |          }d d d            n# 1 swxY w Y   |                     ||          }t          j        ||           t          j        d|          5   t          t          |          d| | j        |d	          }|                     ||          }|D ]}t          j        ||           	 d d d            d S # 1 swxY w Y   d S )
Nr  Fr  r   r  mode.string_storageSelect * from dtype_backendri  rd  rC  	dtype_backend_datar	  r@   r  rT  r?  dtype_backend_expectedr   rp  	r  string_storager^  rd  r]  r   r  r  iterators	            r=   test_read_sql_dtype_backendz+_TestSQLAlchemy.test_read_sql_dtype_backend	  s    $$&&
		%%9	EEE4nEE 	 	&WR&&((($)=  F	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ..~}MM
fh///4nEE 		8 		8(wr4(((((	+	  H 22>=QQH" 8 8%fh77778		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8s%   
*B  BBAD44D8;D8r#   c                v   d}|                                  }|                    || j        dd           t          j        d|          5   t          t          |          || j        |          }d d d            n# 1 swxY w Y   |                     ||          }t          j        ||           t          j        d|          5   t          t          |          || j        |d          }|                     ||          }|D ]}t          j        ||           	 d d d            d S # 1 swxY w Y   d S )	Nr  Fr  r`  ra  rc  ri  re  rf  ri  s	            r=   !test_read_sql_dtype_backend_tablez1_TestSQLAlchemy.test_read_sql_dtype_backend_table	  s    $$&&
		%%9	EEE4nEE 	V 	V&WR&&udi}UUUF	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V..~}MM
fh///4nEE 		8 		8(wr4((	+	  H 22>=QQH" 8 8%fh77778		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8s%   
'A==BBAD..D25D2)r<  r#   r"   c                &   d}|                                  }|                    || j        dd           d}t          j        t
          |          5   t          t          |          || j        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  numpyrc  )rg  r	  r@   r   r4  r5  r?  r  )r  r^  r]  r   r6  s        r=   )test_read_sql_invalid_dtype_backend_tablez9_TestSQLAlchemy.test_read_sql_invalid_dtype_backend_table	  s    $$&&
		%%9	EEE% 	 ]:S111 	G 	GGBeTYgFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   'BB
B
r8  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 )Nr   ri  r
  r  rh  r        @Float64r  rq  rs  )TFNTFTr  r  rn  Nr  rn  r  defgh)r   r   r   r  r  s    r=   rg  z"_TestSQLAlchemy.dtype_backend_data	  s    QN':::IIIW555S"&#.i@@@OOO9===(((((($__%%%	 	
 
 	
r?   c                f   |dk    rjt          t          j        g dt          j                            }t          t          j        ddt          j        gt          j                            }n\t          j        d          t                              g d                    }t                              g d                    }t          t          dt          j        d	gd
          t          g dd
          t          dt          j        dgd          t          g dd          t          ddt          j        gd          t          g dd          ||d          |dk    r<t          j        d          ddlm t          fdj        D                       S )Npythonr  r  r  rn  r  rw  r   ri  r
  rh  r  rs  rt  ru  TFbooleanrv  rx  r   )ArrowExtensionArrayc           	     ^    i | ])}|                      |         d                     *S )T)from_pandas)r  )r[   rN  r  r   pas     r=   
<dictcomp>z:_TestSQLAlchemy.dtype_backend_expected.<locals>.<dictcomp>#
  sK        ,,RXXbg4X-P-PQQ  r?   )r   r   r  object_r  NAr   r   r   r   r   r  pandas.arraysr  r   )r  storagerd  string_arraystring_array_nar  r   r  s        @@@r=   rh  z&_TestSQLAlchemy.dtype_backend_expected
  s    h&rxrz'R'R'RSSL)"(Cbe3DBJ*W*W*WXXOO $Y//B+BHH___,E,EFFL.rxx8H8H8H/I/IJJOQN':::IIIW555S"&#.i@@@OOO9===T5"%0	BBB///yAAA!$	 	
 
 I%%$Y//B999999     !z   B 	r?   c                   ddd}t          ddg                              |          }|                                }|                    d| j        dd	
           t          d| j        |d          D ]}t          j        ||           d S )Nr   r  rm  r  rn  r   r  Fr  r`  zSELECT * FROM testr   )r;   rC  )r   r   r  r	  r@   r"   r   rp  )r  r   r   r  r  s        r=   test_chunksize_empty_dtypesz+_TestSQLAlchemy.test_chunksize_empty_dtypes*
  s    X..Sz***11&997799
		&$)5I	FFF$ I	
 
 
 	4 	4F !&(3333	4 	4r?   rd  numpy_nullablec                   d}t          g ddd          }|                    || j        dd            t          t          |          d| | j        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  rh  r   rm  Fr  r`  rb  r  )r;   rd  r  )r   r   r   r  r   r
  )
r   r	  r@   r?  r  r   r  r   r   rp  )r  r^  rd  r]  r   r  r  s          r=   test_read_sql_dtypez#_TestSQLAlchemy.test_read_sql_dtype9
  s     YYYQ//00
		%%9	EEE"T""$U$$I
#'	
 
 
 IIIRZ888II)6:J)J)J''PW   
 
 	fh/////r?   Nr8  r   )Br  r  r  r  r  r  r  r   r  r$  rY  rZ  rd  rh  rl  rz  r~  rG  rL  r  r  r  rf  r  r  r  r  r  r  rW  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  r  r  r   infr4  rM  rP  rU  rX  rZ  r\  rl  rn  rq  rg  rh  r  r   
no_defaultr  rW   r?   r=   rW  rW    s          KKK  [ V^D!!!) ) "!) $ $ [$ $ $ [$( ( (. . .( ( (, , ,0 0 0(% % %  % % %T T TC C C

A 
A 
A* * *@ @ @M  M  M ^0 0 060 0 0C C CC C C@. . .*. . .(1 1 1' ' '.
L 
L 
L* * ** * ** * *   " " "! ! !( ( (0!* !* !*F9 9 9:+< +< +<Z  @ [
"&	UbfWI."&	UG0T0TU % %	 %6, , ,@D D D
6 6 6
6 6 6
	J 	J 	J   [Vj2B%CDD8 8 ED80 [Vj2B%CDD8 8 ED8, [V%U%U%UVV
G 
G WV
G
 
 
 
# # # #J4 4 4 [_s~?O.PQQ[Vj2B%CDD0 0 ED RQ0 0 0r?   rW  c                       e Zd ZdZdZed             Zed             Zd Zd Z	d Z
d Zd fdZej                            dddg          d             Z xZS )TestSQLiteAlchemyzL
    Test the sqlalchemy backend against an in-memory sqlite database.

    r$   c                8    t          j        d          | _        d S r  r  r  s    r=   rZ  zTestSQLiteAlchemy.setup_engine[
  r  r?   c                    d | _         d S r   )driverr  s    r=   rY  zTestSQLiteAlchemy.setup_driver_
  s     


r?   c                   t          j        d| 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          j                  sJ t          |j        j        j        t          j                  sJ d S rd  )r   r#   r@   r   r|   r;   r   r   r   r}   re  r~   r   r   rV  s     r=   rf  z.TestSQLiteAlchemy.test_default_type_conversiond
  s    33"++0"+>>>>>")/.
;;;;; "**/<<<<< "+16DDDDD ",27EEEEEEEr?   c                    t          j        d| j                  }t          |j        j        j        t          j                  rJ d S rd  r  rV  s     r=   r  z(TestSQLiteAlchemy.test_default_date_loads
  s>    33 bj.3R]CCCCCCCr?   c                   t          dddgid          }|                    d| j        d          dk    sJ t          j        d           5  t          j        d| j                   d d d            d S # 1 swxY w Y   d S )	Nr  r   r,  r   r  test_bigintwarningFro  )r   r	  r@   r   r  r   r#   rV  s     r=   test_bigint_warningz%TestSQLiteAlchemy.test_bigint_warningy
  s    aV}G444yy-tyyFF!KKKK'-- 	@ 	@3TY???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   A55A9<A9c                  	
 ddl m	m
m ddlm}m}  |            } G 	
fdd|          }| j                                        5  |j	        
                    | j                   d d d            n# 1 swxY w Y    || j                  } |            5 }t          ddgdd	gd
          }|                    d| j        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   r.   rv   r1   )r8  sessionmakerc                  V    e Zd ZdZ  d          Z   d                    ZdS )>TestSQLiteAlchemy.test_row_object_is_named_tuple.<locals>.Testr&  Tr?  2   N)r  r  r  rB  rD  string_columnr  s   r=   Testr  
  s?        (MT222B"F66"::..MMMr?   r  ra   r   helloworld)rD  r  r&  Fr  )rF  r   r  r,  rD  r  )r:   r.   rv   r1   rF  r8  r  r@   rg   r<   
create_allr   r	  r  rS  rD  r  r  r   )r  r8  r  	BaseModelr  r7  rL  r   
test_queryr.   rv   r1   s            @@@r=   test_row_object_is_named_tuplez0TestSQLiteAlchemy.test_row_object_is_named_tuple
  sN   
	
 	
 	
 	
 	
 	
 	
 	
 	
 	

	
 	
 	
 	
 	
 	
 	
 	

 %$&&		/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/9 	/ 	/ 	/
 Y__ 	5 	5))$)444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5,DI...WYY 	''1a&GW;MNNOOB		,DIUi	XX    NN tw0BCCJ:&&B	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' BJD/#:::::::s%    A77A;>A;A>D''D+.D+r8  r   c                    t                                          ||          }|dk    r|                    ddd          }n|                    ddd          }|S Nr  r
  )rz  r{  zint64[pyarrow]superrh  r   r  r  rd  r   	__class__s       r=   rh  z(TestSQLiteAlchemy.dtype_backend_expected
  c    WW++G]CC,,,w7788BB!18HIIJJB	r?   r^  r<  r#   c                    d S r   rW   )r  rj  r^  s      r=   rn  z3TestSQLiteAlchemy.test_read_sql_dtype_backend_table
  r]  r?   r  )r  r  r  r  r  r  rZ  rY  rf  r  r  r  rh  r   r  r  rn  __classcell__r  s   @r=   r  r  S
  s         
 FD D [D   [F F FD D D@ @ @#; #; #;J      [Vj2B%CDD  ED    r?   r  c                  ^     e Zd ZdZdZdZed             Zed             Zd Z	d
 fd	Z
 xZS )TestMySQLAlchemyzA
    Test the sqlalchemy backend against an MySQL database.

    r%   i  c                h    t          j        d| j         d| j         d| j                  | _        d S )Nzmysql+z://root@localhost:/pandas)r   )r:   r   r  portr   r   r  s    r=   rZ  zTestMySQLAlchemy.setup_engine
  s?    -DSZDD38DDD)
 
 



r?   c                l    t          j        d          }d| _        d|j        j        j        i| _        d S )Nr   r   )r   r   r  r   r   r   r   )r  r   s     r=   rY  zTestMySQLAlchemy.setup_driver
  s5    %i00
)7+<+C+TUr?   c                    d S r   rW   r  s    r=   rf  z-TestMySQLAlchemy.test_default_type_conversion
  s    r?   r8  r   c                    t                                          ||          }|dk    r|                    ddd          }n|                    ddd          }|S r  r  r  s       r=   rh  z'TestMySQLAlchemy.dtype_backend_expected
  r  r?   r  )r  r  r  r  r  r  r  rZ  rY  rf  rh  r  r  s   @r=   r  r  
  s         
 FD
 
 [
 V V [V
           r?   r  c                  L    e Zd ZdZdZdZed             Zed             Zd Z	dS )TestPostgreSQLAlchemyzF
    Test the sqlalchemy backend against an PostgreSQL database.

    r&   i8  c                Z    t          j        d| j         d| j         d          | _        d S )Nzpostgresql+z://postgres:postgres@localhost:r  )r:   r   r  r  r   r  s    r=   rZ  z"TestPostgreSQLAlchemy.setup_engine
  s4    -V#*VVSXVVV
 



r?   c                <    t          j        d           d| _        d S )Nr   )r   r   r  r  s    r=   rY  z"TestPostgreSQLAlchemy.setup_driver
  s    J'''


r?   c                   ddl m} t          ddgddgddgd	          }| j                                        5  | j                            d
           | j                            d           d d d            n# 1 swxY w Y   |                    d| j        d          dk    sJ |                    d| j        dd          dk    sJ |                    d| j        dd          dk    sJ t          j        d| j                  }t          j
        ||           t          j        d| j                  }t          j
        ||           t          j        d| j        d          }t          j
        ||           t          j        d| j        d          }t          j
        ||           d}t          j        t          |          5  t          j        d| j        d           d d d            n# 1 swxY w Y   | j                                        5  | j                            d
           | j                            d           d d d            n# 1 swxY w Y   |                    d| j        dd          dk    sJ |                    d| j        ddd           |                    d| j        ddd          dk    sJ t          j        d| j        d          }t          j
        t          ||gd          |           t          | j        |          r|                                 }	t          j        |	d          }
|
                    |dd          dk    sJ |
                    |ddd          dk    sJ |
                    |ddd          dk    sJ t          j        d| j        d          }|
                    d          }t          j
        ||           d S d S )Nr   rT   r   r,  rk  r   r  r  r  z$DROP SCHEMA IF EXISTS other CASCADE;zCREATE SCHEMA other;test_schema_publicFro  test_schema_public_explicitpublic)r   r  test_schema_otherother)r  z!Table test_schema_other not foundr  )r  r   r  )r  r   r  r  Tr  test_schema_other2r`  )rc   rU   r   r@   rg   r   r	  r   r#   r   rp  r   r4  r5  r   re   rf   r   
read_table)r  rU   r   rs  rt  r  res4r6  r  engine2pdsqls              r=   test_schema_supportz)TestPostgreSQLAlchemy.test_schema_support
  s*   ,,,,,, Ac
S#JOOPP Y__ 	> 	>I%%&LMMMI%%&<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>
 yy-tyyFF!KKKKII-tyh        II)49E'IRRVWWWWW !"6	BB
b$'''!"?KK
b$'''!)49X
 
 
 	b$'''!"5tyQQQ
b$'''1]:S111 	P 	P2DIhOOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P Y__ 	> 	>I%%&LMMMI%%&<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> II)49WEIRRVWWWWW
		I 	 	
 	
 	
 II#	"         !4diPPP
fb"XDAAA3GGG di(( 	.llnnGOGG<<<E<<$8<FF!KKKKR!5UiXX    R!5UhWW    %&:DIgVVVD##$899D!$-----	. 	.s5   5A::A>A>G66G:=G:5II"IN)
r  r  r  r  r  r  r  rZ  rY  r  rW   r?   r=   r  r  
  sr         
 FD
 
 [

     [ X. X. X. X. X.r?   r  c                      e Zd ZdZdZ ej        d          d             Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                            dddg          d             Zd Zd Zd Zd Zd Zd Zd ZdS )TestSQLiteFallbackzG
    Test the fallback mode against an in-memory sqlite database.

    r$   Tr  c                    |                                  | _        |                     |           |                     |           t	          j        | j                  | _        d S r   )rf   r@   r  r  r   r   r*  r#  s      r=   r$  zTestSQLiteFallback.setup_methodU  sQ    LLNN	I&&&Z(((+DI66r?   c                .    |                                   d S r   rc  r  s    r=   rd  z*TestSQLiteFallback.test_read_sql_parameter\  re  r?   c                .    |                                   d S r   rg  r  s    r=   rh  z0TestSQLiteFallback.test_read_sql_named_parameter_  ri  r?   c                0    |                      |           d S r   rk  r  s     r=   rl  z$TestSQLiteFallback.test_to_sql_emptyb  rm  r?   c                   t          g dg dd          }| j                            |d          dk    sJ | j                            d          sJ | j                            d           | j                            d          rJ d S )Nro  rt  ru  drop_test_framer  )r   r*  r	  r   r  )r  rr  s     r=   test_create_and_drop_tablez-TestSQLiteFallback.test_create_and_drop_tablee  s    (((1E1E1EFF
 

 ~$$Z1BCCqHHHH~''(9:::::!!"3444>++,=>>>>>>>r?   c                0    |                      |           d S r   r  r  s     r=   rG  z!TestSQLiteFallback.test_roundtripr  r  r?   c                .    |                                   d S r   r  r  s    r=   rL  z#TestSQLiteFallback.test_execute_sqlu  r  r?   c                   t          t          ddd          t          ddd          gdg          }|                    d| j        d          dk    sJ t	          d	| j                  }| j        d
k    r/t          j        ||                    t                               d S | j        dk    rt          j        ||           d S d S )Nr  r   r,  r  r   r  Fro  zSELECT * FROM test_dater$   r%   )
r   r   r	  r@   r"   r  r   rp  r   r+   r  s      r=   r  z%TestSQLiteFallback.test_datetime_datex  s    T1a(($tQ*:*:;cUKKKyydiuy==BBBB6	BB;(""!#ryy~~66666[G##!#r***** $#r?   tz_awareFc                   |s#t          ddd          t          ddd          g}nGt          ddd          }t          |                                                              d	           }t          |d
g          }|                    d| j        d          dk    sJ t          d| j                  }| j	        dk    r-|
                    d           }t          j        ||           d S d S )Nr  r   r   r  r  r,  r  r  c                *    |                                  S r   )timetz)r  s    r=   r  z7TestSQLiteFallback.test_datetime_time.<locals>.<lambda>  s    BIIKK r?   r  r   r  Fro  zSELECT * FROM test_timer$   c                ,    |                      d          S r  r  r  s    r=   r  z7TestSQLiteFallback.test_datetime_time.<locals>.<lambda>  s    QZZ-F-F r?   )r   r   r   to_pydatetimemapr   r	  r@   r"   r  r  r   rp  )r  r  tz_timestz_dtr   r  r  s          r=   r  z%TestSQLiteFallback.test_datetime_time  s      	QQ1tAq"~~6HH4aLQQQEe113344889O9OPPHx#///yydiuy==BBBB6	BB;(""{{#F#FGGH!#x00000 #"r?   c                    t          j        dd| dz   | j                  }g }|j        D ]L}t          j        d| d| j                  }|                    |j                                                   M|S )Nz1SELECT * FROM sqlite_master WHERE type = 'index' zAND tbl_name = ''zPRAGMA index_info())r   r"   r@   r   r  rU  )r  r  r  r  ix_nameix_infos         r=   r  z%TestSQLiteFallback._get_index_columns  s     ?,,,,-I
 

 x 	2 	2G()Hg)H)H)H$)TTGNN7<..001111r?   c                .    |                                   d S r   r  r  s    r=   r  z)TestSQLiteFallback.test_to_sql_save_index  r  r?   c                .    |                                   d S r   r  r  s    r=   r  z$TestSQLiteFallback.test_transactions  r  r?   c                    | j                             d| d          }|D ]\  }}}}}}	||k    r|c S t          d| d| d          )NzPRAGMA table_info(r  zTable z	, column rJ  )r@   rG   r5  )
r  r]  rM  recscidr   ctypenot_nulldefaultpks
             r=   rO  z*TestSQLiteFallback._get_sqlite_column_type  sx    y  !>e!>!>!>??7; 	 	3Cuhv~~ D%DD&DDDEEEr?   c                   | j         dk    rt          j        d           ddg}ddg}t          ||          }|                    d| j                  d	k    sJ |                    d
| j        ddi          d	k    sJ |                     dd          dk    sJ |                     d
d          dk    sJ d}t          j        t          |          5  |                    d| j        dt          i           d d d            n# 1 swxY w Y   |                    d| j        d          d	k    sJ |                     dd          dk    sJ |                     dd          dk    sJ d S )Nr%   Not applicable to MySQL legacyr   r   r  r  r   r  r,  r  STRINGr  r  z!B \(<class 'bool'>\) not a stringr  r  r  )
r  r   r\  r   r	  r@   rO  r4  r5  bool)r  r  r   r   r6  s        r=   r  zTestSQLiteFallback.test_dtype  s   ;'!!K8999Sz[)tT***yyty11Q6666yy	#xyIIQNNNN ++L#>>)KKKK++M3??8KKKK2]:S111 	= 	=IIgtydI<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= yy,dixyHHAMMMM++,?EEQQQQ++,?EEQQQQQQs   %DD	D	c                0   | j         dk    rt          j        d           t          dd g          t          t	          ddd          d g          t          dd gd          t          d	d g          d
}t          |          }d}|                    || j                  dk    sJ |                     |d          dk    sJ |                     |d          dk    sJ |                     |d          dk    sJ |                     |d          dk    sJ d S )Nr%   r  Tr	  r   r   r  r  r  r
  r  r,  r  r  r  r  r  r/   r-   )	r  r   r\  r   r   r   r	  r@   rO  )r  r  r   r  s       r=   r  z#TestSQLiteFallback.test_notna_dtype  s9   ;'!!K8999 D$<((HT1a00$7881d)8444S$K((	
 
 t__ yydi((A----++C88IEEEE++C88KGGGG++C779DDDD++C99VCCCCCCr?   c                0   t          ddgddggddg          }d}t          j        t          |	          5  |                    d
| j                   d d d            n# 1 swxY w Y   t          g d          D ]\  }}|                    || j                  dk    sJ t          j        || j                   t          ddgddggd|g          }d|d}|                    || j                  dk    sJ t          j        || j                   d S )Nr   r,  ri  r  r  rn  r   z$Empty table or column name specifiedr  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_namery  )	r   r   r4  r5  r	  r@   	enumerater   table_exists)r  r   r6  ndx
weird_namer  c_tbls          r=   test_illegal_namesz%TestSQLiteFallback.test_illegal_names  s   AA'#s<<<4]:S111 	% 	%IIb$)$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%  )   
  
 	/ 	/OC 99Z33q8888Z333aVaV,sJ6GHHHC1#111E::eTY//14444UDI....)	/ 	/s   AA#&A#N)r  r  r  r  r  r   r  r$  rd  rh  rl  r  rG  rL  r  r  r  r  r  r  r  rO  r  r  r  rW   r?   r=   r  r  M  s[        
 FV^D!!!7 7 "!7( ( (. . .( ( (? ? ?% % %  	+ 	+ 	+ [Z%771 1 871"
 
 
" " "! ! !F F FR R R,D D D(/ / / / /r?   r  z'{}'z{:.8f}z{:d}c                    dS )NNULLrW   )xs    r=   r  r    s    & r?   z{:.10f}z'{!s}'c                    g }|D ]`}t          |t                    rt          |          rd }t          t	          |                   }|                     ||                     a| t          |          z  S r   )re   r   r   _formattersr   r  r  )r   r;  processed_argsarg	formatters        r=   format_queryr    s|    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!   rG   r  r  )rS  rF  rK  r  s       r=   tqueryr
    s    		s	#	# 3z  ''00223 3 3 3 3 3 3 3 3 3 3 3 3 3 3;44DII-s   (A		AAc                  J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestXSQLitec                    |                                 }|                    dt          j        |                      |                                 d S r  )rF   rG   r   r  r  )r  r   r@   rM   s       r=   r  zTestXSQLite.drop_table  sF    kkmmTC,Fz,R,RTTUUUr?   c                   t          j                    }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 )Nr  F)r   rF  r   r  zselect * from test_tabler  txtr  r  Idxtest_table2zselect * from test_table2r  )r   makeTimeDataFramer   r	  r<  r   rp  r)  r  r   r   r?  r   r   )r  r   r   r  r  frame2new_idxs          r=   
test_basiczTestXSQLite.test_basic!  sL   $&&Ju<^5QQQUWWWWW8.II {
fe,,,us5zz)e	#f++..bh???"DuJvM~USSS    '5
 
 
 ::<< #
h/////r?   c                   t          j                    }t          j        |j        d<   t          j        |d          }|                                }|                    |           d}|	                                D ]#\  }}t          |g|R  }t          ||           $|                                 t          j        d|          }	|j        |	_        t          j        |	|d           d S )N)r   r   r  z(INSERT INTO test VALUES (%s, %s, %s, %s)rE  select * from testgMbP?)rtol)r   r  r   r  r   r   r  rF   rG   iterrowsr  r
  r  r<  r   rp  )
r  r   r   r  rM   insr  r\   fmt_sqlr  s
             r=   test_write_row_by_rowz!TestXSQLite.test_write_row_by_row>  s    $&&6
4^E622
##%%J8nn&& 	0 	0FAs"3----G7/////2GGG{
fe$777777r?   c                   t          j                    }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 )Nr  z$INSERT INTO test VALUES (?, ?, ?, ?)r   r  r   )r   r  r   r  rF   rG   r   r!   r  r  r<  r   rp  )	r  r   r   r  rM   r  r\   rK  r  s	            r=   test_executezTestXSQLite.test_executeP  s)   $&&^E622
##%%J4jm">22 	0jsE#JJ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	02NCC{2A2
feBQBi00000s   5$B%%B),B)c                   t          j                    }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 )Nr   r,  r   r   r   DATETIMEr   )r   zPRIMARY KEY ("A", "B"))	r   r  r   r  
splitlinesrK  r)  rF   rG   )r  r   r   r  lineslinetokensrM   s           r=   test_schemazTestXSQLite.test_schema`  s    $&&^E622
%%'' 	/ 	/DZZ__F6{{aF1I$4$4ayJ....^E6c
CCC
%%''':5555##%%J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 )N
        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))rF   rG   r   r!   r   r4  rE  )r  r   r  rM   rK  s        r=   test_execute_failzTestXSQLite.test_execute_failo  sq   
 ##%%J">22 	OjMNNNMNNNs08QRRR O O""#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 	O 	O 	O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 )Nr(  r   r)  z$Cannot operate on a closed database.r  r  rE  )r   r   ro   rf   rF   rG   r   r!   r   r4  ProgrammingErrorr
  )r  r  r@   rM   rK  r6  s         r=   test_execute_closed_connectionz*TestXSQLite.test_execute_closed_connection  s   
 
 ; ;<< 	S++--CKK
###&t,, S
""#QRRR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 5]733??? 	3 	3'T2222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3sG   >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rF  r   r   )r   r   onesr   r	  )r  r   r   s      r=   test_keyword_as_column_namesz(TestXSQLite.test_keyword_as_column_names  sG    

+,,z".~USSSWXXXXXXXr?   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 )Nr   r,  c0r   mono_dfFr1  c              3  &   K   | ]}|d          V  dS )r   NrW   )r[   my_c0s     r=   	<genexpr>z8TestXSQLite.test_onecolumn_of_integer.<locals>.<genexpr>  s&      SS5eAhSSSSSSr?   zselect * from mono_dfri  )r   r   r	  sumrG   r<  r   rp  )r  r   r6  con_xthe_sumr  s         r=   test_onecolumn_of_integerz%TestXSQLite.test_onecolumn_of_integer  s     QFTF333z'~IUSSSWXXXXXSSEMM:Q,R,RSSSSS!||||5u==
fg.....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	          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	          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 |                     ||           d S )Nr   r,  r   r   )r  r  r&  )r   r   Etable_if_existszSELECT * FROM z*'notvalidvalue' is not valid for if_existsr  notvalidvalue)r   rF  r   r  r.  z&Table 'table_if_exists' already existsr  F)r   rF  r   r  r   rE  r  r  ri  )ri  r   r  r   r   r?  r  )r  r  rB  rC  rD  )r   r   r4  r5  r   r	  r  r
  )r  r   df_if_exists_1df_if_exists_2r   
sql_selectr6  s          r=   test_if_existszTestXSQLite.test_if_exists  si   "QFS#J#G#GHH"III#O#OPP&
2j22
:]:S111 	 	J$")	   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
N333 	
 n:QW	
 	
 	
 	
 7]:S111 	 	J$" 	   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	
 	
 	
 	
 jn555(H9MMMMMJ$"#       jn5559W9W9WWWWW
N333 J$"        jn555(H9MMMMMJ$""       jn555 :
 :
 :
 
 
 
 
 	
N33333s$   A66A:=A:C11C58C5N)r  r  r  r  r  r  r  r&  r*  r-  r3  r=  rH  rW   r?   r=   r  r    s          
0 0 0:8 8 8$1 1 1      O O O(3 3 3*Y Y Y/ / /O4 O4 O4 O4 O4r?   r  )r*   r+   )r@   rA   rB   r   )rB   r   r*   r+   )r@   rA   r   r   )r   r   r*   r+   )r   r   )r   r+   r   )r  
__future__r   r   r   rI   r   r   r   r   r   r	   pathlibr   ro   rp  r   r   pandas._libsr   pandas.util._test_decoratorsutil_test_decoratorsr*  pandas.core.dtypes.commonr   r   pandasr  r   r   r   r   r   r   r   r   r   r   pandas._testing_testingr   pandas.core.arraysr   r   pandas.util.versionr   	pandas.ior   pandas.io.sqlr   r   r   r    r!   r"   r#   r:   rU  r  rO  r>   rP   rk   rq   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  mysql_connectablepostgresql_connectablesqlite_connectablesqlite_iris_connectablesqlalchemy_connectablesqlalchemy_connectable_irisall_connectableall_connectable_irisr  rR  r  r  r  r   r+  r2  r7  r?  rD  rL  rT  rW  rY  rb  rf  ru  r  r  r  r  r  r  r  r  rT  r  r-  rW  r  r  r  r  r  r+   str_bytesr   r  r   r  r  r  r  r
  r  rW   r?   r=   <module>ra     s   " # " " " " "           



                                    ) ) ) ) ) ) ) ) )       
                                         ( ' ' ' ' '                       ! ! ! ! !
 FJO   ;;B( (' 6   0& & & &"# # # #0# # #&   B& & & &,   (- - - -; ; ; ;.   
   : , , ,   ,  ,  ,F , , ,   .   
   (   
 " " "      
      
   
         ! 
       +-CCFXX  ..1HH  ),<+==26K5LL  11F F 21 F 11H H 21 H$ 11D D 21 D 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 . !<==  >= ( !566! ! 76 ! !<==! ! >= ! !<==! ! >= ! !788> > 98 >" !233B B 43 B" !233!$ !$ 43 !$H !788)Az?;;", ", <; 98 ",JB B B? ? ?/ / / / / / / /$2 2 2 2 2) 2 2 2*. . . . .i . . .D| | | | | | | |FM0 M0 M0 M0 M0- M0 M0 M0` ,,5OPPH' H' H' H' H'+ H' H' QPH'VQK QK QK QK QKK QK QK QKp ,,5OPPC0 C0 C0 C0 C0o} C0 C0 QPC0L_ _ _ _ _ _ _ _D                F l. l. l. l. l.O l. l. l.fg/ g/ g/ g/ g/m g/ g/ g/^ fmGV]	6=	8?DJJ  J	 (/
	' 	' 	'. . . ._4 _4 _4 _4 _4 _4 _4 _4 _4 _4s   B" "B,+B,