
    <e3                     b   d dl Z d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 edz  Z G d dej                  Z G d d	ej                  Z G d
 dej                  Z G d dej                  Z G d dej                  Z G d dej                  Zedk    r ej                     dS dS )    N)LOOPBACK_TIMEOUT)TESTFNunlink)memory_database
   c                   V    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )TransactionTestsc                    t          j        t          t                    | _        | j                                        | _        t          j        t          t                    | _        | j                                        | _        d S )N)timeout)	sqliteconnectr   TIMEOUTcon1cursorcur1con2cur2selfs    :/usr/lib/python3.11/test/test_sqlite3/test_transactions.pysetUpzTransactionTests.setUp$   s\    N67;;;	I$$&&	N67;;;	I$$&&			    c                 *   	 | j                                          | j                                         | j                                         | j                                         t          t                     d S # t          t                     w xY wN)r   closer   r   r   r   r   r   s    r   tearDownzTransactionTests.tearDown+   sp    	IOOIOOIOOIOO 6NNNNNF6NNNNs   A$A< <Bc                 N   | 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   ress     r   $test_dml_does_not_auto_commit_beforez5TransactionTests.test_dml_does_not_auto_commit_before6   s    	0111	:;;;	1222	.///i  ""S1%%%%%r   c                    | j                             d           | j                             d           | j                            d           | j                                        }|                     t          |          d           d S )Nr   r   r    r   r!   r&   s     r   test_insert_starts_transactionz/TransactionTests.test_insert_starts_transaction>   s|    	0111	:;;;	.///i  ""S1%%%%%r   c                 r   | 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   fetchoner$   r&   s     r   test_update_starts_transactionz/TransactionTests.test_update_starts_transactionE   s    	0111	:;;;		/000	.///i  ""1%a     r   c                    | 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&   s     r   test_delete_starts_transactionz/TransactionTests.test_delete_starts_transactionN   s    	0111	:;;;		,---	.///i  ""S1%%%%%r   c                    | 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    r1   r   r,   r2   r&   s     r   test_replace_starts_transactionz0TransactionTests.test_replace_starts_transactionW   s    	0111	:;;;		;<<<	.///i  ""S1%%%QA&&&&&r   c                    | 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    r1   DEFERRED)r   r"   r   isolation_levelr$   r   r#   r%   r&   s     r   test_toggle_auto_commitz(TransactionTests.test_toggle_auto_commita   s#   	0111	:;;;$(	!2D999	.///i  ""S1%%%$.	!2Z@@@	:;;;	.///i  ""S1%%%%%r   c                    | j                             d           | j                             d           |                     t          j                  5  | j                            d           d d d            d S # 1 swxY w Y   d S )Nr   r   )r   r"   assertRaisesr   OperationalErrorr   r   s    r   test_raise_timeoutz#TransactionTests.test_raise_timeoutq   s    	0111	:;;;v677 	@ 	@I>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   A<<B B c                 B   | j                             d           | j                             d           |                     t          j                  5  | j                            d           ddd           n# 1 swxY w 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   s    r   test_lockingzTransactionTests.test_lockingw   s    
 		0111	:;;;v677 	@ 	@I>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 		s   A;;A?A?c                 P   t          j        d          }|                                }|                    d           |                    d           |                    d           |                                 |                     |                                g d           dS )z3Check that cursors behave correctly after rollback.:memory:zcreate table test(x)zinsert into test(x) values (5)z&select 1 union select 2 union select 3)r1      )   N)r   r   r   r"   rollbackr$   r#   )r   concurs      r    test_rollback_cursor_consistencyz1TransactionTests.test_rollback_cursor_consistency   s    nZ((jjll*+++4555<===);););<<<<<r   c                    i fd}| j                             d            || j         dddd           | j                                           || j        d                                          d         }|                     |d	            || j        d
          j        }|                     |d	           | j                                          || j         dd            || j         dd            || j        d                                          d         }|                     |d            || j         d                                          d         }|                     |d           | j                                           || j        d                                          d         }|                     |d           d S )Nc                     |                                  }|                    ||           |t          |          <   |S r   )r   r"   id)cxsqlargscuCURSORSs       r   rN   z@TransactionTests.test_multiple_cursors_and_iternext.<locals>.sql   s9    BJJsD!!!!GBsGGIr   create table t(t)z"insert into t values (?), (?), (?)u1u2u3zselect count(*) from tr   rE   zdelete from tzinsert into t values (?)u4u5rD   )r   r"   r-   r   r.   r$   rowcount)r   rN   countchangesrQ   s       @r   "test_multiple_cursors_and_iternextz3TransactionTests.test_multiple_cursors_and_iternext   s    	 	 	 	 	 		-...DI;T4NNN	 DI788AACCAF"""#di11:!$$$	 	DI14888DI14888 DI788AACCAF""" DI788AACCAF""" 		DI788AACCAF"""""r   N)__name__
__module____qualname__r   r   r(   r*   r/   r3   r5   r9   r=   r?   rI   r[    r   r   r	   r	   #   s        ' ' '	 	 	& & && & &! ! !& & &' ' '& & & @ @ @
 
 
	= 	= 	=%# %# %# %# %#r   r	   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	RollbackTestszEbpo-44092: sqlite3 now leaves it to SQLite to resolve rollback issuesc                 8   t          j        d          | _        | j                                        | _        | j                                        | _        | j        5  | j                            d           | j                            dg d           d d d            n# 1 swxY w Y   | j                            d           d}| j                            |           | j                                         | j                            |          | _	        d S )NrA   zcreate table t(c)zinsert into t values(?)))r   rB   rC   zbegin transactionzselect c from t)
r   r   rG   r   r   r   r"   executemanyrF   r'   )r   selects     r   r   zRollbackTests.setUp   sA   >*--HOO%%	HOO%%	X 	P 	PH0111H  !:<N<N<NOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 		-..."	&!!!9$$V,,s   8B!!B%(B%c                 8    | j                                          d S r   rG   r   r   s    r   r   zRollbackTests.tearDown       r   c                 r    t          | j                  D ]!\  }}|                     |d         |           "d S )Nr   )	enumerater'   r$   )r   irows      r   _check_rowszRollbackTests._check_rows   sF    )) 	( 	(FAsSVQ''''	( 	(r   c                 2    | ` |                                  d S r   )r   rl   r   s    r   0test_no_duplicate_rows_after_rollback_del_cursorz>RollbackTests.test_no_duplicate_rows_after_rollback_del_cursor   s    Ir   c                 `    | j                                          |                                  d S r   )r   r   rl   r   s    r   2test_no_duplicate_rows_after_rollback_close_cursorz@RollbackTests.test_no_duplicate_rows_after_rollback_close_cursor   s,    	r   c                 b    | j                             d           |                                  d S )Nzselect c from t where c = 1)r   r"   rl   r   s    r   /test_no_duplicate_rows_after_rollback_new_queryz=RollbackTests.test_no_duplicate_rows_after_rollback_new_query   s1    	7888r   N)
r\   r]   r^   __doc__r   r   rl   rn   rp   rr   r_   r   r   ra   ra      st        OO- - -  ( ( (        r   ra   c                   &    e Zd Zd Zd Zd Zd ZdS )SpecialCommandTestsc                 t    t          j        d          | _        | j                                        | _        d S NrA   )r   r   rG   r   rH   r   s    r   r   zSpecialCommandTests.setUp   s*    >*--8??$$r   c                     | j                             d           | j                             d           | j                             d           d S )Nr   r   zdrop table testrH   r"   r   s    r   test_drop_tablez#SpecialCommandTests.test_drop_table   sM    /0009:::*+++++r   c                     | j                             d           | j                             d           | j                             d           d S )Nr   r   zpragma count_changes=1ry   r   s    r   test_pragmazSpecialCommandTests.test_pragma   sM    /0009:::122222r   c                 j    | j                                          | j                                         d S r   )rH   r   rG   r   s    r   r   zSpecialCommandTests.tearDown   s,    r   N)r\   r]   r^   r   rz   r|   r   r_   r   r   ru   ru      sP        % % %, , ,
3 3 3
    r   ru   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TransactionalDDLc                 8    t          j        d          | _        d S rw   )r   r   rG   r   s    r   r   zTransactionalDDL.setUp   s    >*--r   c                     | j                             d           | j                                          | j                             d                                          }|                     |g            d S )Nr   select * from test)rG   r"   rF   r#   r$   )r   results     r   'test_ddl_does_not_autostart_transactionz8TransactionalDDL.test_ddl_does_not_autostart_transaction   sm     	/000!!"677@@BB$$$$$r   c                 D   | j                             d           | j                             d           | j                                          |                     t          j                  5  | j                             d           d d d            d S # 1 swxY w Y   d S )Nzbegin immediater   r   rG   r"   rF   r;   r   r<   r   s    r    test_immediate_transactional_ddlz1TransactionalDDL.test_immediate_transactional_ddl   s     	*+++/000v677 	3 	3H1222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3   -BBBc                 D   | j                             d           | j                             d           | j                                          |                     t          j                  5  | j                             d           d d d            d S # 1 swxY w Y   d S )Nbeginr   r   r   r   s    r   test_transactional_ddlz'TransactionalDDL.test_transactional_ddl  s     	!!!/000v677 	3 	3H1222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3r   c                 8    | j                                          d S r   rf   r   s    r   r   zTransactionalDDL.tearDown  rg   r   N)r\   r]   r^   r   r   r   r   r   r_   r   r   r   r      s_        . . .% % %3 3 33 3 3    r   r   c                   F    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )IsolationLevelFromInitrR   insert into t values(1)c                     g | _         d S r   )tracedr   s    r   r   zIsolationLevelFromInit.setUp  s    r   c                      |                      j                   |                     fd           |5  |                      j                   d d d            d S # 1 swxY w Y   d S )Nc                 8    j                             |           S r   r   appendstmtr   s    r   <lambda>z2IsolationLevelFromInit._run_test.<locals>.<lambda>  s    4;+=+=d+C+C r   )r"   CREATEset_trace_callbackINSERTr   rM   s   ` r   	_run_testz IsolationLevelFromInit._run_test  s    


4;
CCCCDDD 	$ 	$JJt{###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   AA"%A"c                     t                      5 }|                     |           |                     | j        d| j        dg           d d d            d S # 1 swxY w Y   d S NBEGIN COMMITr   r   r$   r   r   r   s     r   test_isolation_level_defaultz3IsolationLevelFromInit.test_isolation_level_default  s     	M"NN2T[8T[(*KLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms   9AAAc                     t          d          5 }|                     |           |                     | j        d| j        dg           d d d            d S # 1 swxY w Y   d S )N r8   r   r   r   r   s     r   test_isolation_level_beginz1IsolationLevelFromInit.test_isolation_level_begin#  s    R000 	MBNN2T[8T[(*KLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M   9AAAc                     t          d          5 }|                     |           |                     | j        d| j        dg           d d d            d S # 1 swxY w Y   d S )Nr7   r   BEGIN DEFERREDr   r   r   s     r   test_isolation_level_deferredz4IsolationLevelFromInit.test_isolation_level_deferred(  s    Z888 	UBNN2T[+;T[(*STTT	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	Ur   c                     t          d          5 }|                     |           |                     | j        d| j        dg           d d d            d S # 1 swxY w Y   d S )N	IMMEDIATEr   BEGIN IMMEDIATEr   r   r   s     r   test_isolation_level_immediatez5IsolationLevelFromInit.test_isolation_level_immediate-      [999 	IRNN2T[/hGI I I	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Ir   c                     t          d          5 }|                     |           |                     | j        d| j        dg           d d d            d S # 1 swxY w Y   d S )N	EXCLUSIVEr   BEGIN EXCLUSIVEr   r   r   s     r   test_isolation_level_exclusivez5IsolationLevelFromInit.test_isolation_level_exclusive3  r   r   c                     t          d           5 }|                     |           |                     | j        | j        g           d d d            d S # 1 swxY w Y   d S )Nr   r   r   s     r   test_isolation_level_nonez0IsolationLevelFromInit.test_isolation_level_none9  s    T222 	9bNN2T[4;-888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   7AAAN)r\   r]   r^   r   r   r   r   r   r   r   r   r   r   r_   r   r   r   r     s         F&F  $ $ $M M M
M M M
U U U
I I II I I9 9 9 9 9r   r   c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )IsolationLevelPostInitr   c                      t          j        d           _         j                            d           g  _         j                             fd           d S )NrA   rR   c                 8    j                             |           S r   r   r   s    r   r   z.IsolationLevelPostInit.setUp.<locals>.<lambda>F  s    0B0B40H0H r   )r   r   rM   r"   r   r   r   s   `r   r   zIsolationLevelPostInit.setUpB  sV    .,,+,,,""#H#H#H#HIIIIIr   c                 8    | j                                          d S r   )rM   r   r   s    r   r   zIsolationLevelPostInit.tearDownH  s    r   c                     | j         5  | j                             | j                   d d d            n# 1 swxY w Y   |                     | j        d| j        dg           d S r   )rM   r"   QUERYr$   r   r   s    r   r   z3IsolationLevelPostInit.test_isolation_level_defaultK  s    W 	( 	(GOODJ'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(xX&FGGGGGs    488c                     d| j         _        | j         5  | j                             | j                   d d d            n# 1 swxY w Y   |                     | j        d| j        dg           d S )Nr   r   r   rM   r8   r"   r   r$   r   r   s    r   r   z1IsolationLevelPostInit.test_isolation_level_beginP  s    "$W 	( 	(GOODJ'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(xX&FGGGGG    A  AAc                     d| j         _        | j         5  | j                             | j                   d d d            n# 1 swxY w Y   |                     | j        d| j        dg           d S )Nr7   r   r   r   r   s    r   test_isolation_level_deferrredz5IsolationLevelPostInit.test_isolation_level_deferrredV  s    ",W 	( 	(GOODJ'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	('7X&NOOOOOr   c                     d| j         _        | j         5  | j                             | j                   d d d            n# 1 swxY w Y   |                     | j        d| j        dg           d S )Nr   r   r   r   r   s    r   r   z5IsolationLevelPostInit.test_isolation_level_immediate\      "-W 	( 	(GOODJ'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(+TZB	D 	D 	D 	D 	Dr   c                     d| j         _        | j         5  | j                             | j                   d d d            n# 1 swxY w Y   |                     | j        d| j        dg           d S )Nr   r   r   r   r   s    r   r   z5IsolationLevelPostInit.test_isolation_level_exclusivec  r   r   c                     d | j         _        | j         5  | j                             | j                   d d d            n# 1 swxY w Y   |                     | j        | j        g           d S r   r   r   s    r   r   z0IsolationLevelPostInit.test_isolation_level_nonej  s    "&W 	( 	(GOODJ'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(tzl33333r   N)r\   r]   r^   r   r   r   r   r   r   r   r   r   r_   r   r   r   r   ?  s        %EJ J J  H H H
H H HP P PD D DD D D4 4 4 4 4r   r   __main__)osunittestsqlite3r   test.supportr   test.support.os_helperr   r   test.test_sqlite3.test_dbapir   r   TestCaser	   ra   ru   r   r   r   r\   mainr_   r   r   <module>r      s  .             ) ) ) ) ) ) 1 1 1 1 1 1 1 1 8 8 8 8 8 8 R
P# P# P# P# P#x( P# P# P#f! ! ! ! !H% ! ! !J    (+   (    x(   D+9 +9 +9 +9 +9X. +9 +9 +9\/4 /4 /4 /4 /4X. /4 /4 /4d zHMOOOOO r   