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 )z
        This tests the improved concurrency with pysqlite 2.3.4. You needed
        to roll back con2 before you could commit con1.
        r   r   N)r   r   r.   r
   r/   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 )z…
        Checks if cursors on the connection are set into a "reset" state
        when a rollback is done on the connection.
        ú:memory:zcreate table test(x)zinsert into test(x) values (5)z&select 1 union select 2 union select 3N)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_infor0   r1   r6   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 ©Nr2   )r
   r   r4   r   r5   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©r5   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   )r5   r   r4   r   r   r   r   r   ¦   s    
zSpecialCommandTests.tearDownN)r7   r8   r9   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   r4   r   r   r   r   r   «   s    zTransactionalDDL.setUpc                 C   s6   | j  d¡ | j  ¡  | j  d¡ ¡ }|  |g ¡ d S )Nr   úselect * from test)r4   r   r3   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   rA   ©r4   r   r3   r.   r
   r/   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   rA   rD   r   r   r   r   ÚCheckTransactionalDDL¿   s
    
z&TransactionalDDL.CheckTransactionalDDLc                 C   s   | j  ¡  d S r   )r4   r   r   r   r   r   r   È   s    zTransactionalDDL.tearDownN)r7   r8   r9   r   rC   rE   rF   r   r   r   r   r   r@   ª   s
   		r@   c                  C   s4   t  td¡} t  td¡}t  td¡}t  | ||f¡S )NZCheck)r:   Z	makeSuiter   r;   r@   Z	TestSuite)Zdefault_suiteZspecial_command_suiteZ	ddl_suiter   r   r   ÚsuiteË   s    rG   c                  C   s   t  ¡ } |  tƒ ¡ d S r   )r:   ZTextTestRunnerÚrunrG   )Zrunnerr   r   r   ÚtestÑ   s    rI   Ú__main__)r   r:   Zsqlite3r
   r   ZTestCaser   r;   r@   rG   rI   r7   r   r   r   r   Ú<module>   s   y!