
    <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 )zm
        pysqlite would crash with older SQLite versions unless
        a workaround is implemented.
        create table foo(bar)drop table fooNr   r   r   s    r   2test_workaround_for_buggy_sqlite_transfer_bindingszBRegressionTests.test_workaround_for_buggy_sqlite_transfer_bindingsk   sO    
 	0111)***011111r   c                 :    | j                             d           dS )z
        pysqlite used to segfault with SQLite versions 3.5.x. These return NULL
        for "no-operation" statements
         NrI   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 )
z
        pysqlite until 2.4.1 did not rebuild the row_cast_map when recompiling
        a statement. This test exhibits the problem.
        z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)N)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   XrW      s.              r   r`   r   r
   r   z$create table foo(bar X, baz integer)z'insert into foo(bar, baz) values (?, ?))r   r   rP   r   assertRaises
IndexError)r   r`   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)ra   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                 T    |                      t          t          j        i d           dS )z!
        See issue 3312.
        N)ra   	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 )NrL   isolation_levelrD   s    r   __del__zCRegressionTests.test_set_isolation_level.<locals>.CustomStr.__del__   s    &(###r   N)r]   r^   r_   rv   rz   )r   s   r   	CustomStrrt      s=          ) ) ) ) ) ) )r   r{   r
   )rL   DEFERRED	IMMEDIATE	EXCLUSIVE)levelr|      r   abczIMMEDIATE EXCLUSIVE   é)r=   r   r   ry   subTestlower
capitalizero   
ValueErrorra   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 )zd
        Verifies that cursor methods check whether base class __init__ was
        called.
        c                       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+5Nz$^Base Cursor\.__init__ not called\.$)	r   r   r   ra   ProgrammingErrorr   fetchallassertRaisesRegexr   )r   r   r   r   s       r   "test_cursor_constructor_call_checkz2RegressionTests.test_cursor_constructor_call_check   sg   
	 	 	 	 	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6CCCc                 v     G d dt                     }| j                            d |d          f           dS )za
        The Python 3.0 port of the module didn't cope with values of subclasses of str.
        c                       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   N)r=   r   r   )r   r   s     r   test_str_subclassz!RegressionTests.test_str_subclass   sF     	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 )zh
        Verifies that connection methods check whether base class __init__ was
        called.
        c                       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
   N)r   r   ra   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                 2    t          j        dd          }dS )z
        Verifies that creating a connection in autocommit mode works.
        2.5.3 introduced a regression so that these could no longer
        be created.
        r
   Nrx   )r   r   rD   s     r   test_auto_commitz RegressionTests.test_auto_commit   s     nZ>>>r   c                     | j                                         }|                    d           |                    d           |                    d           |                                }dS )z
        Verifies that running a PRAGMA statement that does an autocommit does
        work. This did not work in 2.5.3/2.5.4.
        rG   rO   zpragma page_sizeN)r   r   r   rh   )r   r   rows      r   test_pragma_autocommitz&RegressionTests.test_pragma_autocommit   s_    
 hoo+,,,5666&'''llnnr   c                 H    |                      t          | j        d           dS )z}
        Call a connection with a non-string SQL request: check error handling
        of the statement constructor.
        s   select 1N)ra   ro   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   )ra   UnicodeEncodeErrorr   create_collation)r   r   s     r   test_collationzRegressionTests.test_collation  sB    	 	 	,dh.Gl	$ 	$ 	$ 	$ 	$r   c                 v   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 )z
        http://bugs.python.org/issue10811

        Recursively using a cursor, such as when reusing it from a generator led to segfaults.
        Now we catch recursive cursor usage and raise a ProgrammingError.
        r
   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   N)r   r   r   r   ra   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   8)B..B25B2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 )z
        http://bugs.python.org/issue14720

        The microsecond parsing of convert_timestamp() should pad with zeros,
        since the microsecond string "456" actually represents "456000".
        r
   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@ N)r   r   rP   r   r   r   r7   rQ   )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
   {   rx   )ra   ro   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   ra   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   rl   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 )z
        Connection.commit() did reset cursors, which made sqlite3
        to return rows multiple times when fetched from cursors
        after commit. See issues 10513 and 23129 for details.
        r
   z
        create table t(c);
        create table t2(c);
        insert into t values(0);
        insert into t values(1);
        insert into t values(2);
        rL   r   zselect c from t)r4   r   zinsert into t2(c) values (?)r      N   z'should have returned exactly three rows)	r   r   executescriptr7   ry   	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.	1D.	c                     d }t          j        d          }t          j        |          }t          j        ||          }|                    |           ~~t          j                     dS )zm
        The interpreter shouldn't crash in case Cursor.__init__() is called
        more than once.
        c                      d S r   r'   )argss    r   callbackz/RegressionTests.test_bpo31770.<locals>.callback  s    Dr   r
   N)r   r   r   weakrefrefr   r   
gc_collect)r   r   r   r   r   s        r   test_bpo31770zRegressionTests.test_bpo31770  sm    
	 	 	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   )ra   AttributeErrorr   ry   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   rh   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   rM   rT   rc   rm   rq   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   rl   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   rh   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_   rl   r   r   r+  r0  r5  r'   r   r   r  r    sd        
0C3 3 3  6 6 66 6 66 6 6 6 6r   r  __main__)rQ   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   