
    >ieD                    `   d dl mZ d dlZd dlZd dlmZ d dlZd dlmZm	Z	m
Z
 d dlmZmZ d dlmZ  ej        d          Z ej        d          Z ej        d	            ej        d
            ej        d          ZdZe                     ej        e          d          Zej        d             Zd Zej                            d          ej                            dddg          d                         Zd Z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.d' Z/d( Z0d) Z1ed*             Z2ej                            d+d,          ej                            d-d.          d/                         Z3d0 Z4d1 Z5dS )2    )annotationsN)contextmanager)read_sqlread_sql_queryread_sql_table)	assert_eqget_string_dtypetmpfilepandaszdask.dataframe
sqlalchemysqlite3numpyzv
name,number,age,negish
Alice,0,33,-5
Bob,1,40,-3
Chris,2,22,3
Dora,3,16,5
Edith,4,53,0
Francis,5,30,0
Garreth,6,20,0
number)	index_colc               #     K   t                      5 } d| z  }t                              d|dd           |V  d d d            d S # 1 swxY w Y   d S )Nsqlite:///%stestTreplaceindex	if_exists)r   dfto_sql)furis     @lib/python3.11/site-packages/dask/dataframe/io/tests/test_sql.pydbr   "   s      	 aq 
		&#TY	???			                 s   (AA
A
c           
        ddl m}m}m}m}m} t                      5 }d|z  } |            } ||          }	 |d| |d|d           |d|                    }
|                    |	           t          |
j	        |dd	
          }|j
        j	        dk    sJ |                                }|j        du sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   ColumnIntegerMetaDataTablecreate_enginer   empty_tableidTprimary_keycol2   r   npartitions)r   r!   r"   r#   r$   r%   r   
create_allr   namer   computeempty)r   r!   r"   r#   r$   r%   r   r   metadataenginetabledask_dfpd_dataframes                r   
test_emptyr7   *   sa   JJJJJJJJJJJJJJ	 *aq 8::s##F4d333F67##	
 
 	F### SDaPPP}!T)))) ((!T)))))#* * * * * * * * * * * * * * * * * *s   BCCCzOignore:The default dtype for empty Series will be 'object' instead of 'float64'use_headTFc           
        ddl m}m}m}m}m} t                      5 }d|z  } |            }	 ||          }
 |d|	 |d|d                    }|	                    |
           t          	                    dt          t          d                    i                              d          }|                    |j        |dd	
           |rt          |j        |dd          }n't          |j        |dd|j        d d         d          }|j        j        dk    sJ |j        dk    sJ |                                }t)          ||           d d d            d S # 1 swxY w Y   d S )Nr   r    r   single_columnr'   Tr(   2   r   r      r,   )	head_rowsr-   metar   )r   r!   r"   r#   r$   r%   r   r.   pd	DataFramelistrange	set_indexr   r/   r   ilocr   r-   r0   r   )r   r8   r!   r"   r#   r$   r%   r   r   r2   r3   r4   	test_datar5   r6   s                  r   test_single_columnrF   A   s   
 KJJJJJJJJJJJJJ	 +aq 8::s##F4d333
 

 	F###LL$U2YY!899CCDII	S	JJJ 
	$UZRSTTTGG$
^BQB'  G }!T))))"a''''(()\***7+ + + + + + + + + + + + + + + + + +s   D5EE#&E#c                   ddl m} t                              d t	          d          D                       }t
                              |d          }t                      5 }d|z  }  ||           }t          j	        t          d	          5  |                    d
|d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   )r%   c                8    g | ]}|t          |          d z  dS )r<   )is)str).0rI   s     r   
<listcomp>zCtest_passing_engine_as_uri_raises_helpful_error.<locals>.<listcomp>j   s*    CCCQQSVVaZ00CCC       r<   r-   r   zExpected URI to be a stringmatchr   r   )r   )r   r%   r?   r@   rB   ddfrom_pandasr   pytestraises
ValueErrorr   )r   r%   r   ddfr   r3   s         r   /test_passing_engine_as_uri_raises_helpful_errorrY   f   sV   ((((((	CC%((CCC	D	DB
...
+
+C	 <aar""]:-JKKK 	< 	<JJvvJ;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<< < < < < < < < < < < < < < < < < <s6   ",CB3'C3B7	7C:B7	;CCCzERequires a postgres server. Sqlite does not support multiple schemas.)reasonc            
     p   ddl m} m}m}m}m}m}m} d}d}d}	d}
d}d|	 d	|
 d
| d	| d| 
}d}d} ||          } |            } ||| |d|d           |d|          |          }|                    |d | d|z                       |	                    |           t          |j        |d|j        d          }|j        j        dk    sJ |j        j        t                               d          k    sJ |                                }|j        du sJ |                    d|z             d S )Nr   )DDLr!   r"   r#   r$   r%   event	localhost5432userpassr   zpostgresql://:@/r&   other_schemar'   Tr(   r*   )schemabefore_createzCREATE SCHEMA IF NOT EXISTS %sr+   )r   rf   r-   int64z DROP SCHEMA IF EXISTS %s CASCADE)r   r\   r!   r"   r#   r$   r%   r]   listenr.   r   r/   rf   r   r*   dtypenpr0   r1   execute)r\   r!   r"   r#   r$   r%   r]   pg_hostpg_portpg_userpg_passpg_dbdb_url
table_nameschema_namer3   r2   r4   r5   r6   s                       r   test_empty_other_schemaru   t   s    WVVVVVVVVVVVVVVVVV GGGGELWLLwLLLL7LLULLF J K]6""FxzzHEtW$///vw  E 
LL/33'G+'U#V#V    
Fd5<Q  G
 =%%%%<'!2!22222??$$L%%%% NN5CDDDDDrN   c           
       	
 dd l }|j                                         
|                    d          	t                              t          d          	
fdt          d          D             g dd          }t                              |t                              d	
	d
z  z   d dd 
	dz  z   d dg          g          }t                      }t                      5 }d|z  }|
                    d|dd           t          d|dd          }|                    d          }t          ||                    dt          i                     t          d|ddd          }|                    d          }t          ||           t          d|dd          }|                    d                                          }|j                                        |t          gk    sJ |j        sJ |                    d          }t          ||                    dt          i                     t          d|dd|d d                   }|                    d                                          }|j                                        ||gk    sJ |                    d          }t          ||           d d d            d S # 1 swxY w Y   d S )Nr   r+   secondsghjklc                     g | ]
}|z  z   S  r{   rL   rI   dnows     r   rM   z'test_needs_rational.<locals>.<listcomp>   s!    000!#A+000rN      )TTFTT)abcxi  i  r   r   Fr   r   r<   r   r-   r   r      )r-   r   r=      r-   r   r>   )datetimer~   	timedeltar?   r@   rA   rB   concatr	   r   r   r   rC   r   astypeboolget_partitionr0   dtypestolistr1   )r   r   r   string_dtyper   r   datadf2partr}   r~   s            @@r   test_needs_rationalr      s'   OOO




!
!C1%%A	g00000uQxx000000	
 	

 
B 
LLC!d(N>>S1t8^$?? 	


 

B $%%L	 aq 
		&#Ui	@@@ fcqCHHHll3$

C;//000 fcqCSUVVVll3$ fcrSIII!!"%%--//{!!##d';;;;;zll3$

C;//000 fcqCcRTSTRTgVVV!!!$$,,..{!!##l'CCCCCll3$7                 s   #GKKKc                    t          d| dd                                          }|j        t          j        k                                    sJ |j        j        dk    sJ t          |t                     d S )Nr   r<   r   r   )r   r0   r/   r   allr   r   r   r   s     r   test_simpler      sp    &"!xHHHPPRRDI %%''''':?h&&&&dBrN   c                   t          d| t          t          j                  dd          }t	          |j                  dk    sJ |j                                        t          j        k                                    sJ t          d| dgdd          }t          |t          dg                    t          d| t          t          j                  dd	          }|j
        d
k    sJ |j                                        t          j        k                                    sJ t          d| t          t          j                  ddd
          }|j
        d
k    sJ |j                                        t          j        k                                    sJ t          d| t          t          j                  ddd
          }|                    dd          dk                                                                     sJ |j                                        t          j        k                                    sJ d S )Nr   r<   r   )columnsr-   r      r/      z2 GiB)r   bytes_per_chunkr   r+   i   @)r   r   r   r=      Tdeepr   i  )r   rA   r   r   len	divisionsr/   r0   r   r   r-   memory_usage_per_partition)r   r   data_1s      r   test_npartitionsr      s:   D,,!x  D t~!####I27*//11111VH!x  D dBxL!!!
RZ    D q    I27*//11111
RZ    F """"K!!RW,1133333
RZ    D 
	(	(d$	(	?	?#	ENNPPTTVV   I27*//1111111rN   c                   t          d| dgg dd          }|j        dk    sJ |j                                                                        dk    sJ t          |t          dg         t          j        dk                        d S )Nr   r/   r   r<   rO   r   )r   r   r   rO   )r   r   r   maxr0   r   r   r   s     r   test_divisionsr     s    VH			X  D >Y&&&&:>>##%%****dBxLQ/00000rN   c           	        t          j        t          d          5  t          d| dgdg dd           d d d            n# 1 swxY w Y   t          d| dd	
          }|                    dd                                          }d|k                                     r|dk                                     sJ t          |t                     d S )Nz#either 'divisions' or 'npartitions'rQ   r   r/   r   r   r   )r   r   r   r-   d   )r   r   Tr   r;      )	rU   rV   	TypeErrorr   r   r0   r   r   r   )r   outms      r   test_division_or_partitionr     s   	y(M	N	N	N 
 
Hii	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 x
M
M
MC&&D&==EEGGAF<<>>-q3wmmoo---c2s   AAAc           	     .   t          d| dt                              t          d                                                    }|j        t          j        k                                    sJ |j        j        dk    sJ t          |t                     d S )Nr   r   r+   rP   )r   r>   )	r   rS   rT   r   r0   r/   r   r   r   r   s     r   	test_metar   (  s    hR^^BA^-N-N  gii 	 I %%''''':?h&&&&dBrN   c           	        t          d| dt                              t          d          dd          }t	          |j                  dk    sJ |                                }|j        t          j        k                                    sJ |j	        j        dk    sJ t          |t                     t          d| dt                              t          d          g d	d
          }t	          |j                  dk    sJ |                                }|j        t          j        k                                    sJ |j	        j        dk    sJ t          |t                     d S )Nr   r   r+   rP   r<   r   )r   r>   r-   r=   r   )r   r   r   )r   r>   r   r=   )r   rS   rT   r   r   r   r0   r/   r   r   r   r   s     r   test_meta_no_head_rowsr   1  sX   
^^BA^..  D t~!####<<>>DI %%''''':?h&&&&dB
^^BA^..))  D t~!####<<>>DI %%''''':?h&&&&dBrN   c                    t          j        t                    5  t          d| ddd           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r+   )r   r=   r-   )rU   rV   rW   r   r   s    r   test_no_meta_no_head_rowsr   O  s    	z	"	" S SvrXPQRRRRS S S S S S S S S S S S S S S S S S   <A A c                    t          d| ddddg          }|j                                                                        dk    sJ |j                                                                        dk    sJ d S )Nr   r<   r   r+   rO   )r-   r   limits)r   r   minr0   r   r   s     r   test_limitsr   T  sy    &"!xQRTUPVWWWD:>>##%%****:>>##%%******rN   c            	        dd l } | j                                         |                     d          t                              t          d          fdt          ddd          D             d	          }t                      5 }d
|z  }|                    d|dd           t          d|dd          }|j
        j        j        dk    sJ |j        d         |j                                        k    sJ |                    d          }t#          |                    d           |                                           d d d            d S # 1 swxY w Y   d S )Nr   r+   rw   ry   c                     g | ]
}|z  z   S r{   r{   r|   s     r   rM   z"test_datetimes.<locals>.<listcomp>`  s!    "I"I"I13Q;"I"I"IrN   r<   )r   r   r   r   Fr   r   r   r   Mc                *    |                                  S N)
sort_index)r   s    r   <lambda>z test_datetimes.<locals>.<lambda>i  s     rN   )r   r~   r   r?   r@   rA   rB   r   r   r   r   rj   kindr   r   r   rC   r   map_partitionsr   )r   r   r   r   r   r   r}   r~   s         @@r   test_datetimesr   Z  s   OOO




!
!C1%%A	7mm"I"I"I"I"IaR8H8H"I"I"IJJ
 
B 
 Saq 
		&#Ui	@@@fcqCHHHz$++++~a BDHHJJ....ll3$%%&>&>??AQAQRRRS S S S S S S S S S S S S S S S S Ss   
B>EEEc                   t          d|ddddi                                          }d                    d | j        D                       }|d	k    sJ t	          |t
                     t          d|dddd
i                                          }d                    d | j        D                       }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ t	          |t
                     d S )Nr   r<   r   echoF)r-   r   engine_kwargs
c              3  $   K   | ]}|j         V  d S r   messagerL   rs     r   	<genexpr>z8test_extra_connection_engine_keywords.<locals>.<genexpr>q  $      66!AI666666rN    Tc              3  $   K   | ]}|j         V  d S r   r   r   s     r   r   z8test_extra_connection_engine_keywords.<locals>.<genexpr>x  r   rN   WHEREFROMSELECTANDz>= ?z< ?z<= ?)r   r0   joinrecordsr   r   )caplogr   r   r   s       r   %test_extra_connection_engine_keywordsr   l  s6   Xfe_  gii 	 ))66v~666
6
6C"9999dBXfd^  gii 	 ))66v~666
6
6Cc>>>>S====s????C<<<<S====C<<<<S====dBrN   c                &   dd l }ddl m} |                    |                    d          |                    d                                        |                    d                    }t          || dd          }t          |t          dg                    |                    |	                    |                    d          |j
        j                                      d          |                    d                                        |                    d          dk                                  |                    d                    }t          || dd          }t          |t          j        dd dgf                    d S )	Nr   sqlr   r/   r   r<   r   r   )r   r   selectcolumnselect_fromr4   r   r   r   casttypes
BigIntegerlabelwhereloc)r   sar   s1r   s2s         r   
test_queryr     sg   	CJJx((#**V*<*<	=	=	I	I		&
 
B RQ(
C
C
CCc2vh<    	

GGCJJx(("(*=>>DDXNNJJv	
 	
 
szz(##q(	)	)	SYYv&&	'	'  RQ(
C
C
CCc26!""vh,'(((((rN   c                b   ddl m} |                    d          }|                    d          }|                    |||j                            |                              d                                        |                    d                    }t          || dd          }t                                          }|d         j                                        |d<   |                                                    d          }t!          ||j        d d ddgf                    d S )	Nr   r   r   r/   lennamer   r<   r   )r   r   r   r   funclengthr   r   r4   r   r   copyrK   r   reset_indexrC   r   r   )r   r   r   r/   r   r   
lenname_dfs          r   test_query_index_from_queryr     s   ZZ!!F::fD	FD#(//$"7"7"="=i"H"H	I	I	U	U		&
 
B RQ)
D
D
DCJ&v.26688Jy''))33I>>Jc:>!!!h%7"7899999rN   c                h   ddl m} t                              g dd          t                              g dd          d}t                              g d	d          }t                              ||
          }|                    |                    d	          |                    d          |                    d                                        |	                    d                    }t          || dd	|          }t          |t          ddg         t          j        dk               d S )Nr   r   r/   rK   )r/   rj   ageint)r/   r   r   )r   r   r<   r   win32)check_dtype)r   r   r?   SeriesIndexr@   r   r   r   r4   r   r   r   sysplatform)r   r   r   r   r>   r   r   s          r   test_query_with_metar     s    		"6	77yy%uy55 D HHRheH44E<<E<**D	

8cjj00#**U2C2C
 
k#))F##$$  RQ(
N
N
NCc2vuo&CLG4KLLLLLLrN   c                    t          j        t                    5  t          d| ddd            d d d            d S # 1 swxY w Y   d S )Nr   r<   r/   )r-   r   r   )rU   rV   r   r   r   s    r   )test_no_character_index_without_divisionsr    s    	y	!	! T TvrqFdSSSST T T T T T T T T T T T T T T T T Tr   c                   ddl m} |                    |                    d          |                    d                                        |                    d                    }t          || dd          }t          |t          dg                    t          d| dd          
                                }|j        t          j        k                                    sJ |j        j        dk    sJ t          |t                     d S )Nr   r   r   r/   r   r<   r   )r   r   r   r   r   r4   r   r   r   r   r0   r/   r   r   )r   r   rJ   r   r   s        r   test_read_sqlr    s    

3::h''F););<<HH		&	 	A 1ba8
<
<
<Cc2vh<   &"!xHHHPPRRDI %%''''':?h&&&&dBrN   c               #  f   K   t                      5 } d| z  V  d d d            d S # 1 swxY w Y   d S )Nr   r
   )r   s    r   
tmp_db_urir    s      	 !aq    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   &**r-   )r+   r<   parallel)FTc                   t                               d          }t                              t           t           g          }t                              t           |           }|                    d          }t                      5 }|                    d||           t          d|d          }t          t           |           d d d            n# 1 swxY w Y   t                      5 }|                    d||d           t          d|d          }t          t                               d          |           t          d|d          }t          ||           d d d            n# 1 swxY w Y   t                      5 }|                    d||           t          d|d          }t          ||           d d d            n# 1 swxY w Y   t                      5 }|                    d                              d|           t          j        t          d	
          5  t          d|d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t                      5 }|                    d|           t          j        t          d
          5  |                    d|           d d d            n# 1 swxY w Y   |                    d||d           t          d|d          }t          ||           |                    d||d           t          d|d          }t          ||           d d d            n# 1 swxY w Y   t                      5 }|                    d||d          }t          |                                          }|| k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r   )r  r   F)r  r   negishr/   z{Provided index column is of type "object".  If divisions is not provided the index column type must be numeric or datetime.rQ   zTable 'test' already existsappend)r  r   r   )r  r0   )r   rC   r?   r   rS   rT   r  r   r   r   rU   rV   r   rW   r   r0   )	r-   r  	df_by_agedf_appendedrX   
ddf_by_ager   resultactuals	            r   test_to_sqlr    sz    U##I))	
 K ..[
)
)Cu%%J 
 

63
222X66"f               
 %

63
???X66",,x((&111U33)V$$$% % % % % % % % % % % % % % % 
 %&#999U33)V$$$% % % % % % % % % % % % % % % 
 0f$$VS111] P
 
 
 	0 	0 63///		0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 %

63 ]:-JKKK 	$ 	$JJvs###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	

63X
FFFX66+v&&&&#INNNU33)V$$$% % % % % % % % % % % % % % %" 
 %FC(EJJ V^^%%&&$$$$$% % % % % % % % % % % % % % % % % %s   ?CCC(A4E((E,/E,:GGG AI%I7II	I
I	II!I32M%K<MK	MK	A7MMM,AN==OOc                 Z   t                               t          d          } t                      5 }|                     d|d           t          j        t          d          5  |                     d|d            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr<   r   multi)methodz7to_sql\(\) got an unexpected keyword argument 'unknown'rQ   )unknown)rS   rT   r   r  r   rU   rV   r   )rX   r   s     r   test_to_sql_kwargsr     s$   
..Q

C	 2

63w
///]X
 
 
 	2 	2 JJvsDJ111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s5   4B #B<B B	B B	B  B$'B$c           	        t                               t          d          }t                      5 }|                    d|ddi           d                    d | j        D                       }|dk    sJ t          t          t          d|d	                     d d d            n# 1 swxY w Y   t                      5 }|                    d|dd
i           d                    d | j        D                       }d|v sJ d|v sJ t          t          t          d|d	                     d d d            d S # 1 swxY w Y   d S )Nr<   r   r   F)r   r   c              3  $   K   | ]}|j         V  d S r   r   r   s     r   r   z,test_to_sql_engine_kwargs.<locals>.<genexpr>.  $      ;;q;;;;;;rN   r   r   Tc              3  $   K   | ]}|j         V  d S r   r   r   s     r   r   z,test_to_sql_engine_kwargs.<locals>.<genexpr>4  r  rN   CREATEINSERT)	rS   rT   r   r  r   r   r   r   r   )r   rX   r   logss       r   test_to_sql_engine_kwargsr  *  s   
..Q

C	 =

63vuo
>>>yy;;FN;;;;;rzzzz"nVS(;;<<<	= = = = = = = = = = = = = = = 
 =

63vtn
===yy;;FN;;;;;44"nVS(;;<<<= = = = = = = = = = = = = = = = = =s%   A+B&&B*-B*?A/D;;D?D?)6
__future__r   ior   
contextlibr   rU   dask.dataframe.io.sqlr   r   r   dask.dataframe.utilsr   r	   
dask.utilsr   importorskipr?   rS   rk   r   read_csvStringIOr   fixturer   r7   markfilterwarningsparametrizerF   rY   skipru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r{   rN   r   <module>r+     sq   " " " " " " 				 



 % % % % % %  J J J J J J J J J J < < < < < < < <      V""V)**  L ! ! !  I   V!!	 [[T""h[77   * * *. X  dE]33+ + 43 +B< < < R   )E )E )EX3 3 3l  *2 *2 *2Z1 1 1  "    <S S S
+ + +S S S$  .) ) ).: : : M M M$T T T   ! ! !
 //]33D% D% 43 0/D%N2 2 2= = = = =rN   