
    <eM                         d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZ  G d dej                  Z G d dej                  Zed	k    r ej                     dS dS )
    N)support)patch)memory_databasecx_limitc                       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 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 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 )(RegressionTestsc                 8    t          j        d          | _        d S )N:memory:)sqliteconnectconselfs    8/usr/lib/python3.11/test/test_sqlite3/test_regression.pysetUpzRegressionTests.setUp#   s    >*--    c                 8    | j                                          d S N)r   closer   s    r   tearDownzRegressionTests.tearDown&   s    r   c                 b    | j                                         }|                    d           d S )Nzpragma user_version)r   cursorexecuter   curs     r   test_pragma_user_versionz(RegressionTests.test_pragma_user_version)   s,    hoo)*****r   c                 N   t          j        dt           j                  }	 | j                                        }|                    d           |                                 |                                 d S # |                                 |                                 w xY w)Nr
   detect_typeszpragma schema_version)r   r   PARSE_COLNAMESr   r   r   r   r   r   r   s      r   test_pragma_schema_versionz*RegressionTests.test_pragma_schema_version.   s    nZf6KLLL	(//##CKK/000IIKKKIIKKKKK IIKKKIIKKKKs   .A: :*B$c                    t          j        dd          fdt          d          D             }|d                             d           t          d          D ]5}|d                             dd	 t          d          D                        6t          d          D ]#}||                             d
|z  dz              $                                 d S )Nr
      )cached_statementsc                 8    g | ]}                                 S  )r   ).0xr   s     r   
<listcomp>z8RegressionTests.test_statement_reset.<locals>.<listcomp>=   s!    222A3::<<222r   r   zcreate table test(x)
   insert into test(x) values (?)c                     g | ]}|fS r'   r'   r(   r)   s     r   r*   z8RegressionTests.test_statement_reset.<locals>.<listcomp>@   s    E^E^E^qqdE^E^E^r    zselect x from test)r   r   ranger   executemanyrollback)r   cursorsir   s      @r   test_statement_resetz$RegressionTests.test_statement_reset8   s     nZ1===2222q222
1222r 	` 	`AAJ""#CE^E^TYZ\T]T]E^E^E^____q 	? 	?AAJsQw)==>>>>r   c                 (   | j                                         }|                    d           |                     |j        d         d         d           |                    d           |                     |j        d         d         d           d S )Nz select 1 as "foo bar [datetime]"r   zfoo bar [datetime]zselect 1 as "foo baz"zfoo baz)r   r   r   assertEqualdescriptionr   s     r   test_column_name_with_spacesz,RegressionTests.test_column_name_with_spacesG   s    hoo6777+A.0DEEE+,,,+A.	:::::r   c                    t          j        d          }g }t          d          D ]P}|                                }|                    |           |                    dt          |          z              Q|                                 d S )Nr
   i   zselect 1 x union select )r   r   r0   r   appendr   strr   )r   r   r3   r4   r   s        r   'test_statement_finalization_on_close_dbz7RegressionTests.test_statement_finalization_on_close_dbO   s~    
 nZ((s 	= 	=A**,,CNN3KK2SVV;<<<<		r   c                    t          j        d          }|                    d           |                    d           	 |                    d           n# t           j        $ r Y nw xY w|                    d           	 |                                 d S # t           j        $ r |                     d           Y d S w xY w)Nr
   z3create table foo(x, unique(x) on conflict rollback)zinsert into foo(x) values (1)zinsert into foo(x) values (2)z1pysqlite knew nothing about the implicit ROLLBACK)r   r   r   DatabaseErrorcommitOperationalErrorfailr   r   s     r   test_on_conflict_rollbackz)RegressionTests.test_on_conflict_rollback]   s    nZ((IJJJ3444	KK78888# 	 	 	D	3444	KJJLLLLL& 	K 	K 	KIIIJJJJJJ	Ks$    A A('A(B $B?>B?c                     	 | j                             d           | j                             d           | j                             d           d S )Ncreate table foo(bar)drop table foor   r   r   s    r   2test_workaround_for_buggy_sqlite_transfer_bindingszBRegressionTests.test_workaround_for_buggy_sqlite_transfer_bindingsk   sT    	 	0111)***011111r   c                 <    	 | j                             d           d S N rI   r   s    r   test_empty_statementz$RegressionTests.test_empty_statementt   s%    	 	r   c                    	 d}t          j        dt           j                  }|                                }|                    d           |                    dt
          j                                        f           |                    |           |                    d           |                    d           |                    d           |                    |           d S )	Nzselect * from foor
   r   zcreate table foo(bar timestamp)zinsert into foo(bar) values (?)rH   zcreate table foo(bar integer)insert into foo(bar) values (5))r   r   PARSE_DECLTYPESr   r   datetimenow)r   SELECTr   r   s       r   test_type_map_usagez#RegressionTests.test_type_map_usage{   s    	 %nZV5KLLLjjll566658I8M8M8O8O7QRRRF$%%%34445666Fr   c                 :    G fdd          } |            dgt          j        dt           j                  }|                    d           |                     t
                    5  |                    d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Z fdZdS )2RegressionTests.test_bind_mutating_list.<locals>.Xc                 0                                      dS )Nz...)clear)r   protocol
parameterss     r   __conform__z>RegressionTests.test_bind_mutating_list.<locals>.X.__conform__   s      """ur   N)__name__
__module____qualname__r]   )r\   s   r   XrX      s.              r   ra   r   r
   r   z$create table foo(bar X, baz integer)z'insert into foo(bar, baz) values (?, ?))r   r   rQ   r   assertRaises
IndexError)r   ra   r   r\   s      @r   test_bind_mutating_listz'RegressionTests.test_bind_mutating_list   s   	 	 	 	 	 	 	 	 	 	 acc1X
nZV5KLLL:;;;z** 	O 	OKKA:NNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os   ,BBBc           	      Z   |                      t          j                  5 }| j                            dt          t          dg                    f                                           d d d            n# 1 swxY w Y   d}|                     |t          |j
                             d S )Nz"select 'xxx' || ? || 'yyy' colname   z9Could not decode to UTF-8 column 'colname' with text 'xxx)rb   r   rB   r   r   bytes	bytearrayfetchoneassertInr=   	exception)r   cmmsgs      r   test_error_msg_decode_errorz+RegressionTests.test_error_msg_decode_error   s     v677 	D2HA#Ise$4$45579 99A	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D Jc3r|,,-----s   A
A66A:=A:c                 V    	 |                      t          t          j        i d            d S r   )rb   	TypeErrorr   register_adapterr   s    r   test_register_adapterz%RegressionTests.test_register_adapter   s,    	 	)V%<b$GGGGGr   c                     G fddt                     }t          j        d          d _        dD ]y}|                     |          5  |_        |                                _        |                                _         ||          _        d d d            n# 1 swxY w Y   zd _        d_        dt          fdt          fd	t          fd
t          fdt          fg}|D ]\  }}|                     |          5  | 	                    |          5  |_        d d d            n# 1 swxY w Y   | 
                    j        d           d d d            n# 1 swxY w Y   d S )Nc                        e Zd Zd Z fdZdS );RegressionTests.test_set_isolation_level.<locals>.CustomStrc                     d S r   r'   r   s    r   upperzARegressionTests.test_set_isolation_level.<locals>.CustomStr.upper   s    tr   c                     d_         d S rL   isolation_levelrD   s    r   __del__zCRegressionTests.test_set_isolation_level.<locals>.CustomStr.__del__   s    &(###r   N)r^   r_   r`   rw   r{   )r   s   r   	CustomStrru      s=          ) ) ) ) ) ) )r   r|   r
   )rM   DEFERRED	IMMEDIATE	EXCLUSIVE)levelr}      r   abczIMMEDIATE EXCLUSIVE   é)r=   r   r   rz   subTestlower
capitalizerp   
ValueErrorrb   r7   )r   r|   r   pairsvalueexcr   s         @r   test_set_isolation_levelz(RegressionTests.test_set_isolation_level   sl   	) 	) 	) 	) 	) 	) 	) 	) 	) 	) nZ(("= 	7 	7EE** 7 7&+#&+kkmm#&+&6&6&8&8#&/i&6&6#	7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 #(	NS),uj.A#Z06:2F
   	B 	BJE3E** B B&&s++ 0 0*/C'0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  !4jAAAB B B B B B B B B B B B B B B	B 	BsI   A
B""B&	)B&	ED-!E-D11E4D15EE#	&E#	c                    	  G d dt           j                  }t          j        d          } ||          }|                     t           j                  5  |                    d                                           d d d            n# 1 swxY w Y   |                     t           j        d          5  |                                 d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )BRegressionTests.test_cursor_constructor_call_check.<locals>.Cursorc                     d S r   r'   rD   s     r   __init__zKRegressionTests.test_cursor_constructor_call_check.<locals>.Cursor.__init__       r   Nr^   r_   r`   r   r'   r   r   Cursorr      #            r   r   r
   z
select 4+5z$^Base Cursor\.__init__ not called\.$)	r   r   r   rb   ProgrammingErrorr   fetchallassertRaisesRegexr   )r   r   r   r   s       r   "test_cursor_constructor_call_checkz2RegressionTests.test_cursor_constructor_call_check   sl   		 	 	 	 	V] 	 	 	 nZ((fSkkv677 	1 	1KK%%..000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1##F$;$KM M 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   (BBB7CC Cc                 x    	  G d dt                     }| j                            d |d          f           d S )Nc                       e Zd ZdS )0RegressionTests.test_str_subclass.<locals>.MyStrN)r^   r_   r`   r'   r   r   MyStrr      s          r   r   zselect ?r   )r=   r   r   )r   r   s     r   test_str_subclassz!RegressionTests.test_str_subclass   sK    	 	CeeEll_55555r   c                     	  G d dt           j                  } |d          }|                     t           j                  5  |                                }d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )JRegressionTests.test_connection_constructor_call_check.<locals>.Connectionc                     d S r   r'   )r   names     r   r   zSRegressionTests.test_connection_constructor_call_check.<locals>.Connection.__init__   r   r   Nr   r'   r   r   
Connectionr      r   r   r   r
   )r   r   rb   r   r   )r   r   r   r   s       r   &test_connection_constructor_call_checkz6RegressionTests.test_connection_constructor_call_check   s    		 	 	 	 	* 	 	 	 j$$v677 	 	**,,C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A&&A*-A*c                 4    	 t          j        dd           }d S )Nr
   ry   )r   r   rD   s     r   test_auto_commitz RegressionTests.test_auto_commit   s!    	
 nZ>>>r   c                     	 | j                                         }|                    d           |                    d           |                    d           |                                }d S )NrG   rP   zpragma page_size)r   r   r   ri   )r   r   rows      r   test_pragma_autocommitz&RegressionTests.test_pragma_autocommit   sd    	 hoo+,,,5666&'''llnnr   c                 J    	 |                      t          | j        d           d S )Ns   select 1)rb   rp   r   r   s    r   test_connection_callz$RegressionTests.test_connection_call   s)    	 	)TX{;;;;;r   c                 Z    d }|                      t          | j        j        d|           d S )Nc                     dS )Nr   r'   )abs     r   collation_cbz4RegressionTests.test_collation.<locals>.collation_cb  s    1r   u   )rb   UnicodeEncodeErrorr   create_collation)r   r   s     r   test_collationzRegressionTests.test_collation  sB    	 	 	,dh.Gl	$ 	$ 	$ 	$ 	$r   c                 x   	 t          j        d          }|                                                    d                               d           fd}|                     t           j                  5                      dd  |            D                        d d d            d S # 1 swxY w Y   d S )Nr
   zcreate table a (bar)zcreate table b (baz)c               3   @   K                         dd           dV  d S )Nzinsert into a (bar) values (?))r   r   r   )r   s   r   fooz6RegressionTests.test_recursive_cursor_use.<locals>.foo  s)      KK8$???GGGGGr   zinsert into b (baz) values (?)c              3      K   | ]}|fV  d S r   r'   )r(   r4   s     r   	<genexpr>z<RegressionTests.test_recursive_cursor_use.<locals>.<genexpr>  s$      11aaT111111r   )r   r   r   r   rb   r   r1   )r   r   r   r   s      @r   test_recursive_cursor_usez)RegressionTests.test_recursive_cursor_use  s   	 nZ((jjll*+++*+++	 	 	 	 	 v677 	3 	3OO<1133551113 3 3	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   9)B//B36B3c                    	 t          j        dt           j                  }|                                }|                    d           |                    d           |                    d           |                    d           d |                                D             }|                     |t          j        dd	d	d
ddd          t          j        dd	d	d
ddd          g           d S )Nr
   r   zCREATE TABLE t (x TIMESTAMP)z4INSERT INTO t (x) VALUES ('2012-04-04 15:06:00.456')z:INSERT INTO t (x) VALUES ('2012-04-04 15:06:00.123456789')zSELECT * FROM tc                     g | ]
}|d          S )r   r'   r.   s     r   r*   zNRegressionTests.test_convert_timestamp_microsecond_padding.<locals>.<listcomp>4  s    ///1!A$///r   i           r   i@ i@ )r   r   rQ   r   r   r   r7   rR   )r   r   r   valuess       r   *test_convert_timestamp_microsecond_paddingz:RegressionTests.test_convert_timestamp_microsecond_padding!  s    	 nZf6LMMMjjll2333 	JKKK 	PQQQ%&&&/////dAq"aF;;dAq"aF;;"
 	 	 	 	 	r   c                 V    |                      t          t          j        dd           d S )Nr
   {   ry   )rb   rp   r   r   r   s    r   !test_invalid_isolation_level_typez1RegressionTests.test_invalid_isolation_level_type;  s9    ) .*c 	 	K 	K 	K 	K 	Kr   c                    | j                                         }ddg}|D ]}|                     |          5  |                     t          j        d| j         j        |           d d d            n# 1 swxY w Y   |                     |          5  |                     t          j        d|j        |           d d d            n# 1 swxY w Y   d S )Nz	 select 1z	select 1 )queryz	null char)r   r   r   r   r   r   r   )r   r   queriesr   s       r   test_null_characterz#RegressionTests.test_null_characterA  sn   hoo. 	; 	;EE** @ @&&v'>'+x'7@ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ E** ; ;&&v'>'*{E; ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ;		; 	;s#   -A11A5	8A5	(CC
	C
	c                 J   t          j        d          }|                     t          |d           |                     t          |d           |                                }|                     t          |j        d           |                     t          |j        d           d S )Nr
   u   select ''u   select '')r   r   rb   r   r   r   r!   s      r   test_surrogateszRegressionTests.test_surrogatesM  s    nZ((,c3DEEE,c3DEEEjjll,ck;LMMM,ck;LMMMMMr   c                    d}t                      5 }t          |          5 }|                                } |d                    |                     |                    d                    |                     d                    |dz             }|                     t          j        |||           |                     t          j        ||j        |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nzquery string is too largeselect 1zselect 2zselect 3r   )r   r   r   ljustr   r   r   	DataError)r   rm   cxlimcusqls         r   test_large_sqlzRegressionTests.test_large_sqlU  s   ) 		K"hrll 		KcBBz$$%%%JJz'',,---""3q5))C""6#3S"cBBB""6#3S"*cJJJ		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		K 		Ks5   DB<C)D)C-	-D0C-	1DDDc                    	 t          j        d          }|                    d           |                     |j        d           d}t          |                    d                    D ]\  }}|                     ||          5  |                    d|f           |                                 |dk    r|                     |d         d           nE|dk    r|                     |d         d           n"|d	k    r|                     |d         d	           |dz  }d d d            n# 1 swxY w Y   |                     |d
d           d S )Nr
   z
        create table t(c);
        create table t2(c);
        insert into t values(0);
        insert into t values(1);
        insert into t values(2);
        rM   r   zselect c from t)r4   r   zinsert into t2(c) values (?)r         z'should have returned exactly three rows)	r   r   executescriptr7   rz   	enumerater   r   rA   )r   r   counterr4   r   s        r   test_commit_cursor_resetz(RegressionTests.test_commit_cursor_resetb  s   	
 nZ((  	 	 	 	,b111,= > >?? 
	 
	FAss++ 	 	:QDAAA

a<<$$SVQ////\\$$SVQ////\\$$SVQ///1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!%NOOOOOs   BD++D/	2D/	c                     	 d }t          j        d          }t          j        |          }t          j        ||          }|                    |           ~~t          j                     d S )Nc                      d S r   r'   )argss    r   callbackz/RegressionTests.test_bpo31770.<locals>.callback  s    Dr   r
   )r   r   r   weakrefrefr   r   
gc_collect)r   r   r   r   r   s        r   test_bpo31770zRegressionTests.test_bpo31770  sr    		 	 	nZ((mC  k#x((Sr   c                 z    |                      t                    5  | j        `d d d            d S # 1 swxY w Y   d S r   )rb   AttributeErrorr   rz   r   s    r   !test_del_isolation_level_segfaultz1RegressionTests.test_del_isolation_level_segfault  s    ~.. 	) 	)(	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   044c                 2    G d d          }| j         j        t          j        | j         j        d          | j         j        fD ]Q} |            } ||j                    ||j                   | j                             d            |d            Rd S )Nc                       e Zd Zd ZdS ).RegressionTests.test_bpo37347.<locals>.Printerc                     t           j        S r   )r   	SQLITE_OK)r   r   s     r   logz2RegressionTests.test_bpo37347.<locals>.Printer.log  s    ''r   N)r^   r_   r`   r   r'   r   r   Printerr     s#        ( ( ( ( (r   r   r   )nr   )r   set_trace_callback	functoolspartialset_progress_handlerset_authorizerr   r   )r   r   methodprinter_instances       r   test_bpo37347zRegressionTests.test_bpo37347  s    	( 	( 	( 	( 	( 	( 	( 	( x2 ()F!LLLx.0 	 	F  'wyyF#'(((F#'(((HZ(((F4LLLL	 	r   c                     | j                             d          }|                                d         }|                     |d           d S )Nz
select X''r   r   )r   r   ri   r7   )r   r   vals      r   test_return_empty_bytestringz,RegressionTests.test_return_empty_bytestring  sE    h|,,llnnQc"""""r   c                    t                      5 }|                                }|                    d           |                    dd t	          d          D                        |                                 |                    d           |                    d           |                                 d d d            d S # 1 swxY w Y   d S )Ncreate table t(t)insert into t values(?)c              3      K   | ]}|fV  d S r   r'   r(   vs     r   r   zFRegressionTests.test_table_lock_cursor_replace_stmt.<locals>.<genexpr>  $      44aaT444444r   r$   select t from tdrop table t)r   r   r   r1   r0   rA   r!   s      r   #test_table_lock_cursor_replace_stmtz3RegressionTests.test_table_lock_cursor_replace_stmt  s     	#**,,CKK+,,,OO5445884446 6 6JJLLLKK)***KK'''JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   B)CC	C	c                 ~   t                      5 }|                    d           |                    dd t          d          D                        |                                 |                    d          }~|                    d           |                                 d d d            d S # 1 swxY w Y   d S )Nr   r   c              3      K   | ]}|fV  d S r   r'   r   s     r   r   zARegressionTests.test_table_lock_cursor_dealloc.<locals>.<genexpr>  r   r   r$   r   r  )r   r   r1   r0   rA   r!   s      r   test_table_lock_cursor_deallocz.RegressionTests.test_table_lock_cursor_dealloc  s     	#KK+,,,OO5445884446 6 6JJLLL++/00CKK'''JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BB22B69B6c                    t                      5                     d                               dd t          d          D                                                         fd}                    dd|                               d          }~                    d	                                            d d d            d S # 1 swxY w Y   d S )
Nr   r   c              3      K   | ]}|fV  d S r   r'   r   s     r   r   zMRegressionTests.test_table_lock_cursor_non_readonly_select.<locals>.<genexpr>  r   r   r$   c                 6                         d| f           d S )Nr   r   )r   r   s    r   dupzGRegressionTests.test_table_lock_cursor_non_readonly_select.<locals>.dup  s    5t<<<r   r	  r   zselect dup(t) from tr  )r   r   r1   r0   rA   create_function)r   r	  r   r   s      @r   *test_table_lock_cursor_non_readonly_selectz:RegressionTests.test_table_lock_cursor_non_readonly_select  s'    	#KK+,,,OO5445884446 6 6JJLLL     q#...++455CKK'''JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   B2CCCc                    t                      5 }d t          d          D             }|5  |                    d           |                    d|           d d d            n# 1 swxY w Y   g |                    ddfd           |                    d           |                     |           d d d            d S # 1 swxY w Y   d S )	Nc                     g | ]}|fS r'   r'   r   s     r   r*   zJRegressionTests.test_executescript_step_through_select.<locals>.<listcomp>  s    ---qqd---r   r$   r   r   stepr   c                 0                         | f          S r   )r<   )r)   stepss    r   <lambda>zHRegressionTests.test_executescript_step_through_select.<locals>.<lambda>  s    U\\1$5G5G r   zselect step(t) from t)r   r0   r   r1   r
  r   r7   )r   r   r   r  s      @r   &test_executescript_step_through_selectz6RegressionTests.test_executescript_step_through_select  sq    	,#--E!HH---F C C/000 96BBBC C C C C C C C C C C C C C C E+G+G+G+GHHH5666UF+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s5   C,A$C$A(	(C+A(	,A
CC
Cc                      G d dt           j                  }t                      5 }|                    |          }|                                 ~d d d            d S # 1 swxY w Y   d S )Nc                        e Zd Z fdZ xZS )JRegressionTests.test_custom_cursor_object_crash_gh_99886.<locals>.MyCursorc                 H     t                      j        |i | d | _        d S r   )superr   	some_attr)r   r   kwargs	__class__s      r   r   zSRegressionTests.test_custom_cursor_object_crash_gh_99886.<locals>.MyCursor.__init__  s*      $1&111!%r   )r^   r_   r`   r   __classcell__)r  s   @r   MyCursorr    s8        & & & & & & & & &r   r  )r   r   r   r   r   )r   r  r   r   s       r   (test_custom_cursor_object_crash_gh_99886z8RegressionTests.test_custom_cursor_object_crash_gh_99886  s    	& 	& 	& 	& 	&v} 	& 	& 	&  	#**X&&CIIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   +AA#&A#N))r^   r_   r`   r   r   r   r"   r5   r9   r>   rE   rJ   rN   rU   rd   rn   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r'   r   r   r   r   "   sf       . . .  + + +
    ; ; ;  K K K2 2 2     O O O. . .H H HB B B<  "6 6 6  ? ? ?
 
 
< < <$ $ $3 3 3*  4K K K
; 
; 
;N N NK K KP P P>   ) ) )  # # #
	 	 		 	 	  	, 	, 	,    r   r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )RecursiveUseOfCursorsz$Recursive use of cursors not allowedc                     t          j        dt           j                  | _        | j                                        | _        | j                            d           | j                            dddg           d S )Nr
   r   zcreate table test(x foo)r,   )r   )bar)r   r   r    r   r   r   r   r1   r   s    r   r   zRecursiveUseOfCursors.setUp  s~    >*/5/DF F F8??$$3444=&1	3 	3 	3 	3 	3r   c                 j    | j                                          | j                                         d S r   )r   r   r   r   s    r   r   zRecursiveUseOfCursors.tearDown  s,    r   c                      fd}t          j        t          j        d|i          5   j                            d                                t          j         j         j        j	                   d d d            d S # 1 swxY w Y   d S )Nc                 B    j                             j                  S r   )r   r   r   r)   r   s    r   r  zBRecursiveUseOfCursors.test_recursive_cursor_init.<locals>.<lambda>  s    **4844 r   INITz#select x as "x [INIT]", x from test
r   dictr   
convertersr   r   r   r   rm   r   r   convs   ` r   test_recursive_cursor_initz0RecursiveUseOfCursors.test_recursive_cursor_init  s    4444Z)FD>:: 	6 	6HCDDD""6#:DH#'8#46 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6   AB  BBc                      fd}t          j        t          j        d|i          5   j                            d                                t          j         j         j        j	                   d d d            d S # 1 swxY w Y   d S )Nc                 6    j                                         S r   )r   r   r%  s    r   r  zCRecursiveUseOfCursors.test_recursive_cursor_close.<locals>.<lambda>  s    )) r   CLOSEz$select x as "x [CLOSE]", x from testr'  r*  s   ` r   test_recursive_cursor_closez1RecursiveUseOfCursors.test_recursive_cursor_close  s    ))))Z)GT?;; 	6 	6HDEEE""6#:DH#'8#46 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6r-  c                     g f fd	}t          j        t          j        d|i          5   j                            d                                t          j         j         j        j	                   d d d            d S # 1 swxY w Y   d S )Nc                 d    |rj                                         n|                    d           S r   )r   ri   r<   )r)   lr   s     r   r  zBRecursiveUseOfCursors.test_recursive_cursor_iter.<locals>.<lambda>  s)    aKtx00222QXXd^^ r   ITERz#select x as "x [ITER]", x from testr'  r*  s   ` r   test_recursive_cursor_iterz0RecursiveUseOfCursors.test_recursive_cursor_iter  s    KKKKKZ)FD>:: 	6 	6HCDDD""6#:DH#'8#46 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   ABB	BN)	r^   r_   r`   rm   r   r   r,  r1  r6  r'   r   r   r  r    sd        
0C3 3 3  6 6 66 6 66 6 6 6 6r   r  __main__)rR   unittestsqlite3r   r   r   testr   unittest.mockr   test.test_sqlite3.test_dbapir   r   TestCaser   r  r^   mainr'   r   r   <module>r?     s   .                        B B B B B B B BA A A A Ah' A A AF#6 #6 #6 #6 #6H- #6 #6 #6L zHMOOOOO r   