a
    S/bzD                     @   s  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dZedZed ed	 ed
Ze
sejdZdZeje eddZejdd Zdd Zejdejdddgdd Zdd Zejjdddd Z dd  Z!d!d" Z"d#d$ Z#d%d& Z$d'd( Z%d)d* Z&d+d, Z'd-d. Z(d/d0 Z)d1d2 Z*d3d4 Z+d5d6 Z,d7d8 Z-d9d: Z.d;d< Z/d=d> Z0ed?d@ Z1ejdAdBejdCdDdEdF Z2dGdH Z3dIdJ Z4dS )K    N)contextmanager)read_sqlread_sql_queryread_sql_table)PANDAS_GT_120	assert_eqtmpfileZpandaszdask.dataframe
sqlalchemyZsqlite3Znumpyignorezv
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                  c   sJ   t  0} d|  }tjd|ddd |V  W d    n1 s<0    Y  d S )Nsqlite:///%stestTreplaceindex	if_exists)r	   dfto_sql)furi r   ?lib/python3.9/site-packages/dask/dataframe/io/tests/test_sql.pydb$   s    r   c              	   C   s   ddl m}m}m}m}m} t }d| }| }||}	|d||d|dd|d|}
||	 t|
j	|dd	d
}|j
j	dksJ | }|jdu sJ W d    n1 s0    Y  d S )Nr   ColumnIntegerMetaDataTablecreate_enginer   empty_tableidTZ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_dataframer   r   r   
test_empty,   s     
r1   zOignore:The default dtype for empty Series will be 'object' instead of 'float64'use_headTFc              	   C   s  ddl m}m}m}m}m} t }d| }| }	||}
|d|	|d|dd}|	|
 t	dt
tdid}|j|j|dd	d
 |rt|j|ddd}n t|j|dd|jd d dd}|jjdksJ |jdksJ | }t|| W d    n1 s0    Y  d S )Nr   r   r   Z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   Zilocr   r'   r*   r   )r   r2   r   r   r   r   r    r   r   r,   r-   r.   Z	test_datar/   r0   r   r   r   test_single_columnC   s6    
r<   c              	   C   s   ddl m} tdd tdD }tj|dd}t ^}d| } || }tj	t
d	d
  |jd|dd W d    n1 s~0    Y  W d    n1 s0    Y  d S )Nr   )r    c                 S   s   g | ]}|t |d  dqS )r4   )is)str.0r=   r   r   r   
<listcomp>l       zCtest_passing_engine_as_uri_raises_helpful_error.<locals>.<listcomp>   r4   r'   r   zExpected URI to be a stringmatchr   r   )r   )r
   r    r7   r8   r:   ddfrom_pandasr	   pytestraises
ValueErrorr   )r   r    r   ddfr   r-   r   r   r   /test_passing_engine_as_uri_raises_helpful_errorh   s    rN   zERequires a postgres server. Sqlite does not support multiple schemas.)reasonc               
   C   s  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}||d| d|  |	| t
|j|d|jdd}|jjdksJ |jjtdksJ | }|jdu sJ |d|  d S )Nr   )DDLr   r   r   r   r    eventZ	localhostZ5432userpassr   zpostgresql://:@/r!   Zother_schemar"   Tr#   r$   )schemaZbefore_createzCREATE SCHEMA IF NOT EXISTS %sr%   )r   rW   r'   Zint64z DROP SCHEMA IF EXISTS %s CASCADE)r
   rP   r   r   r   r   r    rQ   Zlistenr(   r   r)   rW   r   r$   dtypenpr*   r+   Zexecute)rP   r   r   r   r   r    rQ   Zpg_hostZpg_portZpg_userZpg_passZpg_dbZdb_urlZ
table_nameZschema_namer-   r,   r.   r/   r0   r   r   r   test_empty_other_schemav   s<    $"
rZ   c              
      s  dd l }|j  |jdd ttd fddtdD g dd	}t|td
 d  d d	d  d  d d	gg}t 2}d| }|j	d|ddd t
d|ddd}|d}t||dti t
d|dddd}|d}t|| t
d|ddd}|d }|j dtgks2J |js>J |d}t||dti t
d|dd|d d d}|d }|j ddgksJ |d}t|| W d    n1 s0    Y  d S )Nr   r%   Zsecondsghjklc                    s   g | ]}|   qS r   r   r@   dnowr   r   rB      rC   z'test_needs_rational.<locals>.<listcomp>   )TTFTT)abcxi  i  r   r   Fr   r   r4   rb   r'   r   rc      )r'   r   r5      Or'   r   r6   )datetimer_   	timedeltar7   r8   r9   r:   concatr	   r   r   r;   r   ZastypeboolZget_partitionr*   Zdtypestolistr+   )r   rj   r   r   r   datadf2partr   r]   r   test_needs_rational   sL    






rr   c                 C   sF   t d| ddd }|jtjk s(J |jjdks8J t|t d S )Nr   r4   r   re   )r   r*   r)   r   allr   r   r   ro   r   r   r   test_simple   s    ru   c                 C   s  t d| ttjddd}t|jdks*J |j tjk sBJ t d| dgddd}t	|tdg  t d| ttjddd	}|j
d
ksJ |j tjk sJ t d| ttjddd
d}|j
d
ksJ |j tjk sJ t d| ttjddd
d}|j
dksJ d S )Nr   r4   r   )columnsr'   r      r)      z2 GiB)rv   bytes_per_chunkr   r%   i   @)rv   ry   r   r5      )r   r9   r   rv   len	divisionsr)   r*   rs   r   r'   )r   ro   Zdata_1r   r   r   test_npartitions   sJ    r}   c                 C   sZ   t d| dgg d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   r4   rD   r   )rv   r|   r   rD   )r   r|   r   maxr*   r   r   rt   r   r   r   test_divisions  s    r   c              	   C   s   t t* td| dgdg ddd W d    n1 s:0    Y  td| ddd}|d	d
  }d|k  r~|dk  sJ t|t d S )Nr   r)   r   r~   rw   )rv   r   r|   r'   d   )r   ry   c                 S   s   | j ddd S )NT)Zdeepr   )Zmemory_usagesum)r^   r   r   r   <lambda>"  rC   z,test_division_or_partition.<locals>.<lambda>r3      )	rJ   rK   	TypeErrorr   map_partitionsr*   rs   r   r   )r   outmr   r   r   test_division_or_partition  s    $	r   c                 C   sP   t d| dtjtddd }|jtjk s2J |jjdksBJ t|t d S )Nr   r   r%   rE   )r   r6   )	r   rH   rI   r   r*   r)   rs   r   r   rt   r   r   r   	test_meta(  s    
r   c                 C   s   t d| dtjtddddd}t|jdks0J | }|jtjk sLJ |j	jdks\J t
|t t d| dtjtddg d	dd
}t|jdksJ | }|jtjk sJ |j	jdksJ t
|t d S )Nr   r   r%   rE   r4   r   )r   r6   r'   r5   rw   )r   rw   rx   )r   r6   r|   r5   )r   rH   rI   r   r{   r|   r*   r)   rs   r   r   rt   r   r   r   test_meta_no_head_rows1  s4    
r   c                 C   s@   t t" td| dddd W d    n1 s20    Y  d S )Nr   r   r   r%   )r   r5   r'   )rJ   rK   rL   r   r   r   r   r   test_no_meta_no_head_rowsO  s    r   c                 C   sF   t d| ddddgd}|j  dks,J |j  dksBJ d S )Nr   r4   r   r%   rD   )r'   r   Zlimits)r   r   minr*   r   rt   r   r   r   test_limitsT  s    r   c                     s   dd l } | j  | jdd ttd fddtddd	D d
}t }d| }|jd|ddd t	d|ddd}|j
jjdksJ |jd |j ksJ |d}t|dd |  W d    n1 s0    Y  d S )Nr   r%   r[   r\   c                    s   g | ]}|   qS r   r   r@   r]   r   r   rB   `  rC   z"test_datetimes.<locals>.<listcomp>r4   )ra   rb   r   r   Fr   r   rb   re   Mc                 S   s   |   S N)
sort_index)rd   r   r   r   r   i  rC   z test_datetimes.<locals>.<lambda>)rj   r_   rk   r7   r8   r9   r:   r	   r   r   r   rX   kindr|   rb   r   r;   r   r   r   )rj   r   r   r   ro   rp   r   r]   r   test_datetimesZ  s    
$
r   c                 C   s   t d|ddddid }ddd	 | jD }|d
ks<J t|t t d|ddddid }ddd	 | jD }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ t|t d S )Nr   r4   r   echoF)r'   r   engine_kwargs
c                 s   s   | ]}|j V  qd S r   messagerA   rr   r   r   	<genexpr>q  rC   z8test_extra_connection_engine_keywords.<locals>.<genexpr> Tc                 s   s   | ]}|j V  qd S r   r   r   r   r   r   r   x  rC   ZWHEREZFROMZSELECTZANDz>= ?z< ?z<= ?)r   r*   joinrecordsr   r   )caplogr   ro   r   r   r   r   %test_extra_connection_engine_keywordsl  s$    


r   c                 C   s   dd l }ddl m} ||d|dg|d}t|| ddd}t|tdg  ||	|d|j
jd|dg|ddk|d}t|| ddd}t|tjdd dgf  d S )	Nr   sqlr   r)   r   r4   re   r`   )r
   r   selectcolumnselect_fromr.   r   r   r   casttypesZ
BigIntegerlabelwhereloc)r   Zsar   s1r   s2r   r   r   
test_query  s&    r   c                 C   s   ddl m} |d}|d}||||j|dg|d}t	|| ddd}t
 }|d j |d< | d}t||jd d ddgf  d S )	Nr   r   r   r)   Zlennamer   r4   re   )r
   r   r   r   funclengthr   r   r.   r   r   copyr?   r{   Zreset_indexr;   r   r   )r   r   r   r)   r   r   Z
lenname_dfr   r   r   test_query_index_from_query  s    

r   c                 C   s   ddl m} tjg dddtjg dddd}tjg d	dd}tj||d
}||d	|d|dg|	d}t
|| dd	|d}t|tddg tjdkd d S )Nr   r   r)   r?   )r)   rX   ageint)r)   r   r   )r   r   r4   ri   win32)Zcheck_dtype)r
   r   r7   ZSeriesZIndexr8   r   r   r   r.   r   r   r   sysplatform)r   r   ro   r   r6   r   r   r   r   r   test_query_with_meta  s    r   c                 C   s@   t t" td| ddd d W d    n1 s20    Y  d S )Nr   r4   r)   )r'   r   r|   )rJ   rK   r   r   r   r   r   r   )test_no_character_index_without_divisions  s    r   c                 C   s   ddl m} ||d|dg|d}t|| ddd}t|tdg  t	d| ddd
 }|jtjk szJ |jjdksJ t|t d S )Nr   r   r   r)   r   r4   re   )r
   r   r   r   r   r.   r   r   r   r   r*   r)   rs   r   )r   r   r>   r   ro   r   r   r   test_read_sql  s    r   c                  c   s4   t  } d|  V  W d    n1 s&0    Y  d S )Nr   r   )r   r   r   r   
tmp_db_uri  s    r   r'   )r%   r4   parallel)FTc           	   	   C   s  t d}tt t g}tt | }|d}t 6}|jd||d td|d}t	t | W d    n1 sp0    Y  t T}|jd||dd td|d}t	t d| td|d}t	|| W d    n1 s0    Y  t 6}|jd||d td|d}t	|| W d    n1 s(0    Y  t ^}|dd| t
jtd	d
 td|d W d    n1 s~0    Y  W d    n1 s0    Y  t }|d| t
jtdd
 |d| W d    n1 s0    Y  |jd||dd td|d}t	|| |jd||dd td|d}t	|| W d    n1 s^0    Y  t <}|jd||dd}t| }|| ksJ W d    n1 s0    Y  d S )Nr   r   )r   r   F)r   r   Znegishr)   z{Provided index column is of type "object".  If divisions is not provided the index column type must be numeric or datetime.rF   zTable 'test' already existsappend)r   r   r   )r   r*   )r   r;   r7   rl   rH   rI   r   r   r   r   rJ   rK   r   rL   r{   r*   )	r'   r   Z	df_by_ageZdf_appendedrM   Z
ddf_by_ager   resultactualr   r   r   test_to_sql  sV    

((*L,
*r   c               	   C   s   t td} t ^}| jd|dd tjtdd  | jd|d d W d    n1 sX0    Y  W d    n1 sv0    Y  d S )Nr4   r   Zmulti)methodz7to_sql\(\) got an unexpected keyword argument 'unknown'rF   )unknown)rH   rI   r   r   r   rJ   rK   r   )rM   r   r   r   r   test_to_sql_kwargs#  s    r   c                 C   s   t td}t X}|jd|ddid ddd | jD }|d	ksJJ tttd|d
 W d    n1 sp0    Y  t d}|jd|ddid ddd | jD }d|v sJ d|v sJ tttd|d
 W d    n1 s0    Y  d S )Nr4   r   r   F)r   r   c                 s   s   | ]}|j V  qd S r   r   r   r   r   r   r   1  rC   z,test_to_sql_engine_kwargs.<locals>.<genexpr>r   r   Tc                 s   s   | ]}|j V  qd S r   r   r   r   r   r   r   7  rC   ZCREATEZINSERT)	rH   rI   r   r   r   r   r   r   r   )r   rM   r   Zlogsr   r   r   test_to_sql_engine_kwargs-  s    0r   )5ior   
contextlibr   rJ   Zdask.dataframe.io.sqlr   r   r   Zdask.dataframe.utilsr   r   Z
dask.utilsr	   Zimportorskipr7   rH   rY   ZmarkfilterwarningsZ
pytestmarkro   Zread_csvStringIOr   Zfixturer   r1   Zparametrizer<   rN   skiprZ   rr   ru   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sf   





!
,5*		
G
