3
(h'                 @   sf   d Z ddlZddlmZ yddlZW n ek
r@   ddlZY nX ejd dkZG dd dejZ	dS )z Script to test database capabilities and the DB-API interface
    for functionality and memory leaks.

    Adapted from a script by M-A Lemburg.

    N)time   c               @   s   e Zd ZdZf ZedddZdZdZdZ	dd	 Z
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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,d- Zd.d/ Zd0d1 ZdS )2DatabaseTestNTutf8)Zuse_unicodecharsetz ENGINE=INNODB CHARACTER SET UTF8
   Fc             C   s   | j j| j| j}|| _|j | _djdd tdD d | _t	rbt
 jdd tdD | _ndjd	d tdD | _ttdd
 }| j j|| _d S )N c             S   s   g | ]}t |qS  )chr).0ir	   r	   W/tmp/pip-install-q3hcpn_q/PyMySQL/pymysql/tests/thirdparty/test_MySQLdb/capabilities.py
<listcomp>   s    z&DatabaseTest.setUp.<locals>.<listcomp>   d   c             s   s   | ]}t |V  qd S )N)unichr)r   r   r	   r	   r   	<genexpr>    s    z%DatabaseTest.setUp.<locals>.<genexpr>iA  c             s   s   | ]}t |V  qd S )N)r
   )r   r   r	   r	   r   r   "   s       )	db_moduleconnectconnect_argsconnect_kwargs
connectioncursorjoinrangeZBLOBTextPY2unicode	BLOBUText	bytearrayBinary
BLOBBinary)selfdbdatar	   r	   r   setUp   s    
zDatabaseTest.setUpc             C   sJ   | j rFdd l}| `|j }| j|d|  | `|j }| j|d|  d S )Nr   z/%d orphaned objects found after deleting cursorz3%d orphaned objects found after deleting connection)	leak_testgcr   ZcollectassertFalser   )r"   r'   Zorphansr	   r	   r   tearDown(   s    zDatabaseTest.tearDownc             C   s2   y| j jd|  W n tk
r(   dS X dS d S )Nzselect * from %s where 1=0FT)r   execute	Exception)r"   namer	   r	   r   table_exists3   s
    zDatabaseTest.table_existsc             C   s   d| S )Nz"%s"r	   )r"   identr	   r	   r   quote_identifier;   s    zDatabaseTest.quote_identifierc             C   s8   t | j}x(| jd| }| j|s(|S |d }qW d S )Nztb%08x   )idr   r/   r-   )r"   r   r,   r	   r	   r   new_table_name>   s    

zDatabaseTest.new_table_namec             C   s.   | j  | _| jjd| jdj|| jf  dS )a   Create a table using a list of column definitions given in
            columndefs.

            generator must be a function taking arguments (row_number,
            col_number) returning a suitable data object for insertion
            into the table.

        zCREATE TABLE %s (%s) %sz,
N)r2   tabler   r*   r   create_table_extra)r"   
columndefsr	   r	   r   create_tableF   s
    

zDatabaseTest.create_tablec                s  | j   d| jdjdgt  f } fddt| jD }| jrPt| | jj	|| | j
j  | jjd| j  | jj }| jrt| | jt|| j zHxBt| jD ]4}x.tt D ]}| j|| | || qW qW W d | js| jjd| j  X d S )NzINSERT INTO %s VALUES (%s),z%sc                s(   g | ]   fd dt tD qS )c                s   g | ]} |qS r	   r	   )r   j)	generatorr   r	   r   r   \   s    z@DatabaseTest.check_data_integrity.<locals>.<listcomp>.<listcomp>)r   len)r   )r5   r9   )r   r   r   \   s   z5DatabaseTest.check_data_integrity.<locals>.<listcomp>zselect * from %szdrop table %s)r6   r3   r   r:   r   rowsdebugprintr   executemanyr   commitr*   fetchallassertEqual)r"   r5   r9   insert_statementr$   lr   r8   r	   )r5   r9   r   check_data_integrityV   s*    


&z!DatabaseTest.check_data_integrityc                sp  d dd | j   d| jdjdgt  f } fdd	t| jD }| jj|| | jj	  | jj
d
| j  | jj }| jt|| j xBt| jD ]4}x.tt D ]}| j|| | || qW qW d| j }| jj
|d | jj
d| jdf  | jj }| j|d | jj  | jj
d| jdf  | jj }| jt|dkd | jj
d| j  d S )Ncol1 INTcol2 VARCHAR(255)c             S   s    |dkr| S d| d  d S d S )Nr   z%ir      r	   )rowcolr	   r	   r   r9   r   s     z1DatabaseTest.test_transactions.<locals>.generatorzINSERT INTO %s VALUES (%s)r7   z%sc                s(   g | ]   fd dt tD qS )c                s   g | ]} |qS r	   r	   )r   r8   )r9   r   r	   r   r   y   s    z=DatabaseTest.test_transactions.<locals>.<listcomp>.<listcomp>)r   r:   )r   )r5   r9   )r   r   r   y   s   z2DatabaseTest.test_transactions.<locals>.<listcomp>zselect * from %szdelete from %s where col1=%%sr   z!select col1 from %s where col1=%szDELETE didn't workr0   zROLLBACK didn't workzdrop table %s)rE   rF   )r   )r6   r3   r   r:   r   r;   r   r>   r   r?   r*   r@   rA   r(   rollbackZ
assertTrue)r"   rB   r$   rC   r   r8   Zdelete_statementr	   )r5   r9   r   test_transactionsp   s8    


"



zDatabaseTest.test_transactionsc                s  d fddj   djdjdgt  f }yjj|dd	d
 f W n< tk
rx   jrttjj	 Y n" j
jk
r   Y nX jd j
j  yTxNtjD ]@}g }x$tt D ]}|j|| qW jj|t| qW W nB tk
r"   jrtjj	 Y n$ j
jk
r:   Y nX jd j
j  y, fddtjD }jj|| W nB tk
r   jrtjj	 Y n$ j
jk
r   Y nX jd j
j  jjdj  d S )Ncol1 INTcol2 VARCHAR(255)c                s.   |dkr| S d| d  d j d  |   S d S )Nr   z%ir   rG   r   )r;   )rH   rI   )r"   r	   r   r9      s     z/DatabaseTest.test_truncation.<locals>.generatorzINSERT INTO %s VALUES (%s)r7   z%sr   0r   zGOver-long column did not generate warnings/exception with single insertzDOver-long columns did not generate warnings/exception with execute()c                s(   g | ]   fd dt tD qS )c                s   g | ]} |qS r	   r	   )r   r8   )r9   r   r	   r   r      s    z;DatabaseTest.test_truncation.<locals>.<listcomp>.<listcomp>)r   r:   )r   )r5   r9   )r   r   r      s   z0DatabaseTest.test_truncation.<locals>.<listcomp>zHOver-long columns did not generate warnings/exception with executemany()zdrop table %s)rL   rM   )r6   r3   r   r:   r   r*   Warningr<   r=   messagesr   Z	DataErrorfailrJ   r   r;   appendtupler>   )r"   rB   r   r$   r8   r	   )r5   r9   r"   r   test_truncation   sP    
 

 

 

zDatabaseTest.test_truncationc             C   s   dd }| j d| d S )Nc             S   s   d| | d  d S )Nz%ir   rG   r	   )rH   rI   r	   r	   r   r9      s    z)DatabaseTest.test_CHAR.<locals>.generatorcol1 char(255)col2 char(255))rU   rV   )rD   )r"   r9   r	   r	   r   	test_CHAR   s    zDatabaseTest.test_CHARc             C   s   dd }| j d| d S )Nc             S   s   | |  S )Nr	   )rH   rI   r	   r	   r   r9      s    z(DatabaseTest.test_INT.<locals>.generatorcol1 INT)rX   )rD   )r"   r9   r	   r	   r   test_INT   s    zDatabaseTest.test_INTc             C   s   dd }| j d| d S )Nc             S   s   ddl m} |d| |f S )Nr   )Decimalz%d.%02d)decimalrZ   )rH   rI   rZ   r	   r	   r   r9      s    z,DatabaseTest.test_DECIMAL.<locals>.generatorcol1 DECIMAL(5,2))r\   )rD   )r"   r9   r	   r	   r   test_DECIMAL   s    zDatabaseTest.test_DECIMALc                s$   t   fdd} jd| d S )Nc                s    j j| d  |d  S )NiQ i!  )r   ZDateFromTicks)rH   rI   )r"   ticksr	   r   r9      s    z)DatabaseTest.test_DATE.<locals>.generator	col1 DATE)r_   )r   rD   )r"   r9   r	   )r"   r^   r   	test_DATE   s
    zDatabaseTest.test_DATEc                s$   t   fdd} jd| d S )Nc                s    j j| d  |d  S )NiQ i!  )r   ZTimeFromTicks)rH   rI   )r"   r^   r	   r   r9      s    z)DatabaseTest.test_TIME.<locals>.generator	col1 TIME)ra   )r   rD   )r"   r9   r	   )r"   r^   r   	test_TIME   s
    zDatabaseTest.test_TIMEc                s$   t   fdd} jd| d S )Nc                s    j j| d  |d  S )NiQ i!  )r   TimestampFromTicks)rH   rI   )r"   r^   r	   r   r9      s    z-DatabaseTest.test_DATETIME.<locals>.generatorcol1 DATETIME)rd   )r   rD   )r"   r9   r	   )r"   r^   r   test_DATETIME   s
    zDatabaseTest.test_DATETIMEc                s$   t   fdd} jd| d S )Nc                s    j j| d  |d  S )NiQ i!  )r   rc   )rH   rI   )r"   r^   r	   r   r9      s    z.DatabaseTest.test_TIMESTAMP.<locals>.generatorcol1 TIMESTAMP)rf   )r   rD   )r"   r9   r	   )r"   r^   r   test_TIMESTAMP   s
    zDatabaseTest.test_TIMESTAMPc                s$   t   fdd} jd| d S )Nc                s,    j j| d  |d  | d | d  S )NiQ i!  gffffff?g      @)r   rc   )rH   rI   )r"   r^   r	   r   r9      s    z9DatabaseTest.test_fractional_TIMESTAMP.<locals>.generatorcol1 TIMESTAMP)rh   )r   rD   )r"   r9   r	   )r"   r^   r   test_fractional_TIMESTAMP   s
    z&DatabaseTest.test_fractional_TIMESTAMPc                s    fdd} j d| d S )Nc                s   |dkr| S  j S d S )Nr   )r   )rH   rI   )r"   r	   r   r9     s    z)DatabaseTest.test_LONG.<locals>.generatorcol1 INT	col2 LONG)rj   rk   )rD   )r"   r9   r	   )r"   r   	test_LONG  s    zDatabaseTest.test_LONGc                s    fdd} j d| d S )Nc                s   |dkr| S  j d d S d S )Nr   iH  )r   )rH   rI   )r"   r	   r   r9     s    z)DatabaseTest.test_TEXT.<locals>.generatorcol1 INT	col2 TEXT)rm   rn   )rD   )r"   r9   r	   )r"   r   	test_TEXT  s    zDatabaseTest.test_TEXTc                s    fdd} j d| d S )Nc                s   |dkr| S  j S d S )Nr   )r!   )rH   rI   )r"   r	   r   r9     s    z.DatabaseTest.test_LONG_BYTE.<locals>.generatorcol1 INTcol2 LONG BYTE)rp   rq   )rD   )r"   r9   r	   )r"   r   test_LONG_BYTE  s    zDatabaseTest.test_LONG_BYTEc                s    fdd} j d| d S )Nc                s   |dkr| S  j S d S )Nr   )r!   )rH   rI   )r"   r	   r   r9   #  s    z)DatabaseTest.test_BLOB.<locals>.generatorcol1 INT	col2 BLOB)rs   rt   )rD   )r"   r9   r	   )r"   r   	test_BLOB"  s    zDatabaseTest.test_BLOB) __name__
__module____qualname__r   r   dictr   r4   r;   r<   r%   r&   r)   r-   r/   r2   r6   rD   rK   rT   rW   rY   r]   r`   rb   re   rg   ri   rl   ro   rr   ru   r	   r	   r	   r   r      s8   !2	


r   )
__doc__sysr   Z	unittest2ZunittestImportErrorversion_infor   ZTestCaser   r	   r	   r	   r   <module>   s   