a
    åze¯  ã                   @   sx   d dl Z d dlZd dlZdd„ ZG dd„ dejƒZG dd„ dejƒZG dd	„ d	ejƒZd
d„ Z	dd„ Z
edkrte
ƒ  dS )é    Nc                   C   s   dS )NZsqlite_testdb© r   r   r   ú//usr/lib/python3.9/sqlite3/test/transactions.pyÚget_db_path   s    r   c                   @   sˆ   e 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
e ejdk d¡dd„ ƒZe ejdk d¡dd„ ƒZdd„ ZdS )ÚTransactionTestsc                 C   sd   zt  tƒ ¡ W n ty"   Y n0 tjtƒ dd| _| j ¡ | _tjtƒ dd| _	| j	 ¡ | _
d S )Ngš™™™™™¹?)Útimeout)ÚosÚremover   ÚOSErrorÚsqliteÚconnectÚcon1ÚcursorÚcur1Úcon2Úcur2©Úselfr   r   r   ÚsetUp   s    zTransactionTests.setUpc                 C   sP   | j  ¡  | j ¡  | j ¡  | j ¡  zt tƒ ¡ W n tyJ   Y n0 d S ©N)	r   Úcloser   r   r   r   Úunlinkr   r	   r   r   r   r   ÚtearDown+   s    



zTransactionTests.tearDownc                 C   sN   | j  d¡ | j  d¡ | j  d¡ | j d¡ | j ¡ }|  t|ƒd¡ d S )Núcreate table test(i)úinsert into test(i) values (5)zcreate table test2(j)úselect i from testr   ©r   Úexecuter   ÚfetchallÚassertEqualÚlen©r   Úresr   r   r   ÚCheckDMLDoesNotAutoCommitBefore7   s    
z0TransactionTests.CheckDMLDoesNotAutoCommitBeforec                 C   sB   | j  d¡ | j  d¡ | j d¡ | j ¡ }|  t|ƒd¡ d S )Nr   r   r   r   r   r    r   r   r   ÚCheckInsertStartsTransaction?   s
    
z-TransactionTests.CheckInsertStartsTransactionc                 C   sX   | j  d¡ | j  d¡ | j ¡  | j  d¡ | j d¡ | j ¡ d }|  |d¡ d S )Nr   r   zupdate test set i=6r   r   é   )r   r   r   Úcommitr   Zfetchoner   r    r   r   r   ÚCheckUpdateStartsTransactionF   s    
z-TransactionTests.CheckUpdateStartsTransactionc                 C   sX   | j  d¡ | j  d¡ | j ¡  | j  d¡ | j d¡ | j ¡ }|  t|ƒd¡ d S )Nr   r   zdelete from testr   é   ©r   r   r   r%   r   r   r   r   r    r   r   r   ÚCheckDeleteStartsTransactionO   s    

z-TransactionTests.CheckDeleteStartsTransactionc                 C   sl   | j  d¡ | j  d¡ | j ¡  | j  d¡ | j d¡ | j ¡ }|  t|ƒd¡ |  |d d d¡ d S )Nr   r   zreplace into test(i) values (6)r   r'   r   r$   r(   r    r   r   r   ÚCheckReplaceStartsTransactionX   s    

z.TransactionTests.CheckReplaceStartsTransactionc                 C   s¤   | j  d¡ | j  d¡ d | j_|  | jjd ¡ | j d¡ | j ¡ }|  t|ƒd¡ d| j_|  | jjd¡ | j  d¡ | j d¡ | j ¡ }|  t|ƒd¡ d S )Nr   r   r   r'   ZDEFERRED)r   r   r   Zisolation_levelr   r   r   r   r    r   r   r   ÚCheckToggleAutoCommitb   s    

z&TransactionTests.CheckToggleAutoCommit)é   é   r-   z.test hangs on sqlite versions older than 3.2.2c                 C   sT   | j  d¡ | j  d¡ |  tj¡ | j d¡ W d   ƒ n1 sF0    Y  d S ©Nr   r   )r   r   ÚassertRaisesr
   ÚOperationalErrorr   r   r   r   r   ÚCheckRaiseTimeoutr   s    z"TransactionTests.CheckRaiseTimeoutc                 C   s^   | j  d¡ | j  d¡ |  tj¡ | j d¡ W d   ƒ n1 sF0    Y  | j ¡  d S r.   )r   r   r/   r
   r0   r   r   r%   r   r   r   r   ÚCheckLockingz   s
    *zTransactionTests.CheckLockingc                 C   sp   t  d¡}| ¡ }| d¡ | d¡ | d¡ | ¡  |  t j¡ | ¡  W d   ƒ n1 sb0    Y  d S )Nú:memory:zcreate table test(x)zinsert into test(x) values (5)z&select 1 union select 2 union select 3)r
   r   r   r   Úrollbackr/   ZInterfaceErrorr   )r   ÚconÚcurr   r   r   ÚCheckRollbackCursorConsistencyˆ   s    



z/TransactionTests.CheckRollbackCursorConsistencyN)Ú__name__Ú
__module__Ú__qualname__r   r   r"   r#   r&   r)   r*   r+   ÚunittestZskipIfr
   Zsqlite_version_infor1   r2   r7   r   r   r   r   r      s"   		
ÿ
ÿ
r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚSpecialCommandTestsc                 C   s   t  d¡| _| j ¡ | _d S ©Nr3   )r
   r   r5   r   r6   r   r   r   r   r   ˜   s    zSpecialCommandTests.setUpc                 C   s(   | j  d¡ | j  d¡ | j  d¡ d S )Nr   r   zdrop table test©r6   r   r   r   r   r   ÚCheckDropTableœ   s    z"SpecialCommandTests.CheckDropTablec                 C   s(   | j  d¡ | j  d¡ | j  d¡ d S )Nr   r   zpragma count_changes=1r>   r   r   r   r   ÚCheckPragma¡   s    zSpecialCommandTests.CheckPragmac                 C   s   | j  ¡  | j ¡  d S r   )r6   r   r5   r   r   r   r   r   ¦   s    
zSpecialCommandTests.tearDownN)r8   r9   r:   r   r?   r@   r   r   r   r   r   r<   —   s   r<   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTransactionalDDLc                 C   s   t  d¡| _d S r=   )r
   r   r5   r   r   r   r   r   «   s    zTransactionalDDL.setUpc                 C   s6   | j  d¡ | j  ¡  | j  d¡ ¡ }|  |g ¡ d S )Nr   úselect * from test)r5   r   r4   r   r   )r   Úresultr   r   r   Ú#CheckDdlDoesNotAutostartTransaction®   s    
z4TransactionalDDL.CheckDdlDoesNotAutostartTransactionc                 C   s^   | j  d¡ | j  d¡ | j  ¡  |  tj¡ | j  d¡ W d   ƒ n1 sP0    Y  d S )Nzbegin immediater   rB   ©r5   r   r4   r/   r
   r0   r   r   r   r   ÚCheckImmediateTransactionalDDL¶   s
    
z/TransactionalDDL.CheckImmediateTransactionalDDLc                 C   s^   | j  d¡ | j  d¡ | j  ¡  |  tj¡ | j  d¡ W d   ƒ n1 sP0    Y  d S )NZbeginr   rB   rE   r   r   r   r   ÚCheckTransactionalDDL¿   s
    
z&TransactionalDDL.CheckTransactionalDDLc                 C   s   | j  ¡  d S r   )r5   r   r   r   r   r   r   È   s    zTransactionalDDL.tearDownN)r8   r9   r:   r   rD   rF   rG   r   r   r   r   r   rA   ª   s
   		rA   c                  C   s4   t  td¡} t  td¡}t  td¡}t  | ||f¡S )NZCheck)r;   Z	makeSuiter   r<   rA   Z	TestSuite)Zdefault_suiteZspecial_command_suiteZ	ddl_suiter   r   r   ÚsuiteË   s    rH   c                  C   s   t  ¡ } |  tƒ ¡ d S r   )r;   ZTextTestRunnerÚrunrH   )Zrunnerr   r   r   ÚtestÑ   s    rJ   Ú__main__)r   r;   Zsqlite3r
   r   ZTestCaser   r<   rA   rH   rJ   r8   r   r   r   r   Ú<module>   s   y!