U
    /ezD                     @   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   s6   t  &} d|  }tjd|ddd |V  W 5 Q R X d S )Nsqlite:///%stestTreplaceindex	if_exists)r	   dfto_sql)furi r   D/tmp/pip-unpacked-wheel-dbjnr7gq/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st| }|jdkstW 5 Q R X 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   AssertionErrorcomputeempty)r   r   r   r   r   r    r   r   metadataenginetabledask_dfpd_dataframer   r   r   
test_empty,   s     
r2   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st|jdkst| }t|| W 5 Q R X 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   )r   r3   r   r   r   r   r    r   r   r-   r.   r/   Z	test_datar0   r1   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 5 Q R X W 5 Q R X d S )Nr   )r    c                 S   s   g | ]}|t |d  dqS )r5   )is)str.0r>   r   r   r   
<listcomp>l   s     zCtest_passing_engine_as_uri_raises_helpful_error.<locals>.<listcomp>   r5   r'   r   zExpected URI to be a stringmatchr   r   )r   )r
   r    r8   r9   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st|jjtdkst| }|jdkst|d|  d S )Nr   )DDLr   r   r   r   r    event	localhostZ5432userpassr   zpostgresql://:@/r!   Zother_schemar"   Tr#   r$   )schemaZbefore_createzCREATE SCHEMA IF NOT EXISTS %sr%   )r   rX   r'   Zint64z DROP SCHEMA IF EXISTS %s CASCADE)r
   rP   r   r   r   r   r    rQ   listenr(   r   r)   rX   r   r*   r$   dtypenpr+   r,   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/   r0   r1   r   r   r   test_empty_other_schemav   sH    $"  

    r]   c              
      s  dd l }|j  |jdd ttd fddtdD ddd	ddgd
}t|td d  d d
d  d  d d
gg}t (}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s8t|jsDt|d}t||dti t
d|dd|d d d}|d }|j ddgkst|d}t|| W 5 Q R X d S )Nr   r%   secondsghjklc                    s   g | ]}|   qS r   r   rA   dnowr   r   rC      s     z'test_needs_rational.<locals>.<listcomp>   TF)abcxi  i  r   r   r   r   r5   rf   r'   r   rg      )r'   r   r6      Or'   r   r7   )datetimerc   	timedeltar8   r9   r:   r;   concatr	   r   r   r<   r   ZastypeboolZget_partitionr+   Zdtypestolistr*   r,   )r   rn   r   r   r   datadf2partr   ra   r   test_needs_rational   sL    






rv   c                 C   sF   t d| ddd }|jtjk s(t|jjdks8tt|t d S )Nr   r5   r   ri   )r   r+   r)   r   allr*   r   r   r   rs   r   r   r   test_simple   s    ry   c                 C   s  t d| ttjddd}t|jdks*t|j tjk	 sBtt d| dgddd}t
|tdg  t d| ttjddd	}|jd
kst|j tjk	 stt d| ttjddd
d}|jd
kst|j tjk	 stt d| ttjddd
d}|jdkstd S )Nr   r5   r   )columnsr'   r      r)      z2 GiB)rz   bytes_per_chunkr   r%   i   @)rz   r}   r   r6      )r   r:   r   rz   len	divisionsr*   r)   r+   rw   r   r'   )r   rs   Zdata_1r   r   r   test_npartitions   sZ            r   c                 C   s\   t d| dgdddgdd}|jdks(t|j  dks>tt|tdg tjdk  d S )	Nr   r)   r   r5   rD   r   )rz   r   r   )r   r5   rD   )r   r   r*   r   maxr+   r   r   rx   r   r   r   test_divisions  s        r   c              	   C   s~   t t" td| dgddddgdd W 5 Q R X td| dd	d
}|dd  }d|k  rl|dk  sptt|t	 d S )Nr   r)   r   r   r5   rD   r{   )rz   r   r   r'   d   )r   r}   c                 S   s   | j ddd S )NT)deepr   )Zmemory_usagesum)rb   r   r   r   <lambda>"      z,test_division_or_partition.<locals>.<lambda>r4      )
rJ   rK   	TypeErrorr   map_partitionsr+   rw   r*   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 s2t|jjdksBtt	|t d S )Nr   r   r%   rE   )r   r7   )
r   rH   rI   r   r+   r)   rw   r*   r   r   rx   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s0t| }|jtjk	 sLt|j
jdks\tt|t t d| dtjtddddd	gdd
}t|jdkst| }|jtjk	 st|j
jdkstt|t d S )Nr   r   r%   rE   r5   r   )r   r7   r'   r6   r{   r|   )r   r7   r   r6   )r   rH   rI   r   r   r   r*   r+   r)   rw   r   r   rx   r   r   r   test_meta_no_head_rows1  s4    
r   c              	   C   s,   t t td| dddd W 5 Q R X d S )Nr   r   r   r%   )r   r6   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,t|j  dksBtd S )Nr   r5   r   r%   rD   )r'   r   Zlimits)r   r   minr+   r*   r   rx   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st|jd |j kst|d}t|dd |  W 5 Q R X d S )Nr   r%   r^   r`   c                    s   g | ]}|   qS r   r   rA   ra   r   r   rC   `  s     z"test_datetimes.<locals>.<listcomp>r5   )re   rf   r   r   Fr   r   rf   ri   Mc                 S   s   |   S N)
sort_index)rh   r   r   r   r   i  r   z test_datetimes.<locals>.<lambda>)rn   rc   ro   r8   r9   r:   r;   r	   r   r   r   rZ   kindr*   r   rf   r   r<   r   r   r   )rn   r   r   r   rs   rt   r   ra   r   test_datetimesZ  s    
$
r   c                 C   s   t d|ddddid }ddd	 | jD }|d
ks<tt|t t d|ddddid }ddd	 | jD }d|kstd|kstd|kstd|kstd|kstd|kstd|kstt|t d S )Nr   r5   r   echoF)r'   r   engine_kwargs
c                 s   s   | ]}|j V  qd S r   messagerB   rr   r   r   	<genexpr>q  s     z8test_extra_connection_engine_keywords.<locals>.<genexpr> Tc                 s   s   | ]}|j V  qd S r   r   r   r   r   r   r   x  s     ZWHEREZFROMZSELECTANDz>= ?z< ?z<= ?)r   r+   joinrecordsr*   r   r   )caplogr   rs   r   r   r   r   %test_extra_connection_engine_keywordsl  s4        

    
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   r5   ri   rd   )r
   r   selectcolumnselect_fromr/   r   r   r   casttypesZ
BigIntegerlabelwhereloc)r   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   r5   ri   )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)   rZ   ageint)r)   r   r   )r   r   r5   rm   win32)Zcheck_dtype)r
   r   r8   ZSeriesZIndexr9   r   r   r   r/   r   r   r   sysplatform)r   r   rs   r   r7   r   r   r   r   r   test_query_with_meta  s    r   c              	   C   s,   t t td| ddd d W 5 Q R X d S )Nr   r5   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 szt|jjdkstt|t d S )Nr   r   r   r)   r   r5   ri   )r
   r   r   r   r   r/   r   r   r   r   r+   r)   rw   r*   r   )r   r   r?   r   rs   r   r   r   test_read_sql  s    r   c               	   c   s    t  } d|  V  W 5 Q R X d S )Nr   r   )r   r   r   r   
tmp_db_uri  s    r   r'   )r%   r5   parallel)FTc           	   
   C   s  t d}tt t g}tt | }|d}t ,}|jd||d td|d}t	t | W 5 Q R X t J}|jd||dd td|d}t	t d| td|d}t	|| W 5 Q R X t ,}|jd||d td|d}t	|| W 5 Q R X t >}|dd| t
jtd	d
 td|d W 5 Q R X W 5 Q R X t }|d| t
jtdd
 |d| W 5 Q R X |jd||dd td|d}t	|| |jd||dd td|d}t	|| W 5 Q R X t 2}|jd||dd}t| }|| kstW 5 Q R X 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<   r8   rp   rH   rI   r   r   r   r   rJ   rK   r   rL   r   r+   r*   )	r'   r   Z	df_by_ageZdf_appendedrM   Z
ddf_by_ager   resultactualr   r   r   test_to_sql  sV    

 
r   c               
   C   s\   t td} t @}| jd|dd tjtdd | jd|d d W 5 Q R X W 5 Q R X d S )Nr5   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 N}|jd|ddid ddd | jD }|d	ksJtttt	d|d
 W 5 Q R X t Z}|jd|ddid ddd | jD }d|kstd|kstttt	d|d
 W 5 Q R X d S )Nr5   r   r   F)r   r   c                 s   s   | ]}|j V  qd S r   r   r   r   r   r   r   1  s     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  s     ZCREATEZINSERT)
rH   rI   r   r   r   r   r   r*   r   r   )r   rM   r   Zlogsr   r   r   test_to_sql_engine_kwargs-  s    r   )5ior   
contextlibr   rJ   Zdask.dataframe.io.sqlr   r   r   Zdask.dataframe.utilsr   r   Z
dask.utilsr	   Zimportorskipr8   rH   r[   markfilterwarningsZ
pytestmarkrs   Zread_csvStringIOr   Zfixturer   r2   Zparametrizer=   rN   skipr]   rv   ry   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
