
    daf<L                         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"                          yy)
    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'y&)'RegressionTestsc                 8    t        j                  d      | _        y )N:memory:)sqliteconnectconselfs    </root/Python-3.12.4/Lib/test/test_sqlite3/test_regression.pysetUpzRegressionTests.setUp#   s    >>*-    c                 8    | j                   j                          y N)r   closer   s    r   tearDownzRegressionTests.tearDown&   s    r   c                 Z    | j                   j                         }|j                  d       y )Nzpragma user_version)r   cursorexecuter   curs     r   test_pragma_user_versionz(RegressionTests.test_pragma_user_version)   s    hhoo)*r   c                 0   t        j                  dt         j                        }	 | j                  j	                         }|j                  d       |j                          |j                          y # j                          |j                          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.   sb    nnZf6K6KL	((//#CKK/0IIKIIK IIKIIKs   +A3 3"Bc                    t        j                  dd      }t        d      D cg c]  }|j                          }}|d   j	                  d       t        d      D ]/  }|d   j                  dt        d      D cg c]  }|f c}       1 t        d      D ]  }||   j	                  d|z  d	z           |j                          y c c}w c c}w )
Nr
      )cached_statementsr   zcreate table test(x)
   insert into test(x) values (?) zselect x from test)r   r   ranger   r   executemanyrollback)r   r   xcursorsis        r   test_statement_resetz$RegressionTests.test_statement_reset8   s     nnZ1=).q2A3::<22
12r 	`AAJ""#CTYZ\T]E^qqdE^_	` q 	?AAJsQw)==>	? 	 3 F_s   C
<
Cc                    | j                   j                         }|j                  d       | j                  |j                  d   d   d       |j                  d       | j                  |j                  d   d   d       y )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   si    hhoo67+A.0DE+,+A.	:r   c                     t        j                  d      }g }t        d      D ]@  }|j                         }|j	                  |       |j                  dt        |      z          B |j                          y )Nr
   i   zselect 1 x union select )r   r   r)   r   appendr   strr   )r   r   r-   r.   r   s        r   'test_statement_finalization_on_close_dbz7RegressionTests.test_statement_finalization_on_close_dbO   sb    
 nnZ(s 	=A**,CNN3KK2SV;<	= 			r   c                 `   t        j                  d      }|j                  d       |j                  d       	 |j                  d       |j                  d       	 |j	                          y # t         j                  $ r Y 8w xY w# t         j
                  $ r | j                  d       Y y 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    nnZ(IJ34	KK78 	34	KJJL	 ## 		
 && 	KIIIJ	Ks#   A- B -BB$B-,B-c                     | j                   j                  d       | j                   j                  d       | j                   j                  d       y)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   s=    
 	01)*01r   c                 :    | j                   j                  d       y)z
        pysqlite used to segfault with SQLite versions 3.5.x. These return NULL
        for "no-operation" statements
         NrC   r   s    r   test_empty_statementz$RegressionTests.test_empty_statementt   s    
 	r   c                    d}t        j                  dt         j                        }|j                         }|j	                  d       | j                  t        d      5  |j	                  dt        j                  j                         f       ddd       |j	                  |       |j	                  d       |j	                  d	       |j	                  d
       |j	                  |       y# 1 sw Y   _xY w)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)adapterzinsert into foo(bar) values (?)NrB   zcreate table foo(bar integer)insert into foo(bar) values (5))	r   r   PARSE_DECLTYPESr   r   assertWarnsRegexDeprecationWarningdatetimenow)r   SELECTr   r   s       r   test_type_map_usagez#RegressionTests.test_type_map_usage{   s    
 %nnZV5K5KLjjl56""#5yA 	WKK9H<M<M<Q<Q<S;UV	WF$%3456F	W 	Ws   0C--C6c                     G fdd      } |       dgt        j                  dt         j                        }|j                  d       | j	                  t
              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Z fdZy)2RegressionTests.test_bind_mutating_list.<locals>.Xc                 &    j                          y)Nz...)clear)r   protocol
parameterss     r   __conform__z>RegressionTests.test_bind_mutating_list.<locals>.X.__conform__   s      "r   N)__name__
__module____qualname__rY   )rX   s   r   XrT      s    r   r]   r   r
   r   z$create table foo(bar X, baz integer)z'insert into foo(bar, baz) values (?, ?))r   r   rK   r   assertRaises
IndexError)r   r]   r   rX   s      @r   test_bind_mutating_listz'RegressionTests.test_bind_mutating_list   ss    	 	 c1X
nnZV5K5KL:;z* 	OKKA:N	O 	O 	Os   "A>>Bc           	      6   | j                  t        j                        5 }| j                  j	                  dt        t        dg            f      j                          d d d        d}| j                  |t        j                               y # 1 sw Y   1xY w)Nz"select 'xxx' || ? || 'yyy' colname   z9Could not decode to UTF-8 column 'colname' with text 'xxx)r^   r   r<   r   r   bytes	bytearrayfetchoneassertInr7   	exception)r   cmmsgs      r   test_error_msg_decode_errorz+RegressionTests.test_error_msg_decode_error   s     v667 	D2HHA#Ise$45799A	D Jc3r||,-		D 	Ds   ?BBc                 P    | j                  t        t        j                  i d       y)z!
        See issue 3312.
        N)r^   	TypeErrorr   register_adapterr   s    r   test_register_adapterz%RegressionTests.test_register_adapter   s     	)V%<%<b$Gr   c                     G fddt               }t        j                  d      d _        dD ][  }| j	                  |      5  |_        |j                         _        |j                         _         ||      _        d d d        ] d _        d_        dt        fdt        fd	t        fd
t        fdt        fg}|D ]]  \  }}| j	                  |      5  | j                  |      5  |_        d d d        | j                  j                  d       d d d        _ y # 1 sw Y   xY w# 1 sw Y   <xY w# 1 sw Y   xY w)Nc                       e Zd Zd Z fdZy);RegressionTests.test_set_isolation_level.<locals>.CustomStrc                      y r    r   s    r   upperzARegressionTests.test_set_isolation_level.<locals>.CustomStr.upper   s    r   c                     d_         y )NrF   isolation_levelr>   s    r   __del__zCRegressionTests.test_set_isolation_level.<locals>.CustomStr.__del__   s    &(#r   N)rZ   r[   r\   rt   rx   )r   s   r   	CustomStrrq      s    )r   ry   r
   )rF   DEFERRED	IMMEDIATE	EXCLUSIVE)levelrz      r   abczIMMEDIATE EXCLUSIVE   é)r7   r   r   rw   subTestlower
capitalizerl   
ValueErrorr^   r1   )r   ry   r}   pairsvalueexcr   s         @r   test_set_isolation_levelz(RegressionTests.test_set_isolation_level   sT   	) 	) nnZ("= 	7EE* 7&+#&+kkm#&+&6&6&8#&/&6#	7 7	7 #(	NS),uj.A#Z06:2F
   	BJE3E* B&&s+ 0*/C'0  !4!4jAB B	B7 70 0B Bs0   ?D%D=.D16$D=%D.	1D:6D==E	c                     G d dt         j                        }t        j                  d      } ||      }| j                  t         j                        5  |j                  d      j                          ddd       | j                  t         j                  d      5  |j                          ddd       y# 1 sw Y   CxY w# 1 sw Y   yxY w)zd
        Verifies that cursor methods check whether base class __init__ was
        called.
        c                       e Zd Zd Zy)BRegressionTests.test_cursor_constructor_call_check.<locals>.Cursorc                      y r   rs   r>   s     r   __init__zKRegressionTests.test_cursor_constructor_call_check.<locals>.Cursor.__init__       r   NrZ   r[   r\   r   rs   r   r   Cursorr          r   r   r
   z
select 4+5Nz$^Base Cursor\.__init__ not called\.$)	r   r   r   r^   ProgrammingErrorr   fetchallassertRaisesRegexr   )r   r   r   r   s       r   "test_cursor_constructor_call_checkz2RegressionTests.test_cursor_constructor_call_check   s    
	V]] 	 nnZ(Skv667 	1KK%..0	1##F$;$;$KM 	IIK	 		1 	1	 	s    B8C8CCc                 h     G d dt               }| j                  j                  d |d      f       y)za
        The Python 3.0 port of the module didn't cope with values of subclasses of str.
        c                       e Zd Zy)0RegressionTests.test_str_subclass.<locals>.MyStrN)rZ   r[   r\   rs   r   r   MyStrr      s    r   r   zselect ?r   N)r7   r   r   )r   r   s     r   test_str_subclassz!RegressionTests.test_str_subclass   s&     	CeEl_5r   c                      G d dt         j                        } |d      }| j                  t         j                        5  |j	                         }ddd       y# 1 sw Y   yxY w)zh
        Verifies that connection methods check whether base class __init__ was
        called.
        c                       e Zd Zd Zy)JRegressionTests.test_connection_constructor_call_check.<locals>.Connectionc                      y r   rs   )r   names     r   r   zSRegressionTests.test_connection_constructor_call_check.<locals>.Connection.__init__   r   r   Nr   rs   r   r   
Connectionr      r   r   r   r
   N)r   r   r^   r   r   )r   r   r   r   s       r   &test_connection_constructor_call_checkz6RegressionTests.test_connection_constructor_call_check   sT    
	** 	 $v667 	**,C	 	 	s   AA$c                 2    t        j                  dd      }y)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
   Nrv   )r   r   r>   s     r   test_auto_commitz RegressionTests.test_auto_commit   s     nnZ>r   c                     | j                   j                         }|j                  d       |j                  d       |j                  d       |j                         }y)z
        Verifies that running a PRAGMA statement that does an autocommit does
        work. This did not work in 2.5.3/2.5.4.
        rA   rJ   zpragma page_sizeN)r   r   r   re   )r   r   rows      r   test_pragma_autocommitz&RegressionTests.test_pragma_autocommit   sF    
 hhoo+,56&'llnr   c                 F    | j                  t        | j                  d       y)z}
        Call a connection with a non-string SQL request: check error handling
        of the statement constructor.
        s   select 1N)r^   rl   r   r   s    r   test_connection_callz$RegressionTests.test_connection_call   s    
 	)TXX{;r   c                 b    d }| j                  t        | j                  j                  d|       y )Nc                      y)Nr~   rs   )abs     r   collation_cbz4RegressionTests.test_collation.<locals>.collation_cb  s    r   u   )r^   UnicodeEncodeErrorr   create_collation)r   r   s     r   test_collationzRegressionTests.test_collation  s)    	,dhh.G.Gl	$r   c                 B   t        j                  d      }|j                         j                  d       j                  d       fd}| j	                  t         j
                        5  j                  dd  |       D               ddd       y# 1 sw Y   yxY w)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    j                  dd       d y w)Nzinsert into a (bar) values (?))r~   r~   r   )r   s   r   fooz6RegressionTests.test_recursive_cursor_use.<locals>.foo  s     KK8$?Gs   zinsert into b (baz) values (?)c              3   "   K   | ]  }|f 	 y wr   rs   ).0r.   s     r   	<genexpr>z<RegressionTests.test_recursive_cursor_use.<locals>.<genexpr>   s     1aaT1   N)r   r   r   r   r^   r   r*   )r   r   r   r   s      @r   test_recursive_cursor_usez)RegressionTests.test_recursive_cursor_use  s     nnZ(jjl*+*+	 v667 	3OO<13513	3 	3 	3s   -BBc                 "   t        j                  dt         j                        }|j                         }|j	                  d       |j	                  d       |j	                  d       |j	                  d       | j                  t        d      5  |j                         D cg c]  }|d   	 }}d	d	d	       | j                  t        j                  d
dddddd      t        j                  d
dddddd      g       y	c c}w # 1 sw Y   UxY w)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 t	converterr   Ni           i@ i@ )
r   r   rK   r   r   rL   rM   r   r1   rN   )r   r   r   r,   valuess        r   *test_convert_timestamp_microsecond_paddingz:RegressionTests.test_convert_timestamp_microsecond_padding"  s     nnZf6L6LMjjl23 	JK 	PQ%&""#5{C 	4$'LLN3qad3F3	4 	dAq"aF;dAq"aF;"
 	 4	4 	4s   D#D /D DDc                 R    | j                  t        t        j                  dd       y )Nr
   {   rv   )r^   rl   r   r   r   s    r   !test_invalid_isolation_level_typez1RegressionTests.test_invalid_isolation_level_type=  s#    ) ..*c 	 	Kr   c                    | j                   j                         }ddg}|D ]  }| j                  |      5  | j                  t        j
                  d| j                   j                  |       d d d        | j                  |      5  | j                  t        j
                  d|j                  |       d d d         y # 1 sw Y   SxY w# 1 sw Y   xY w)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_characterC  s    hhoo. 	;EE* @&&v'>'>'+xx'7'7@@ E* ;&&v'>'>'*{{E;; ;		;@ @; ;s   7B?-C?C	C	c                 .   t        j                  d      }| j                  t        |d       | j                  t        |d       |j	                         }| j                  t        |j
                  d       | j                  t        |j
                  d       y )Nr
   u   select ''u   select '')r   r   r^   r   r   r   r!   s      r   test_surrogateszRegressionTests.test_surrogatesO  ss    nnZ(,c3DE,c3DEjjl,ckk;LM,ckk;LMr   c                    d}t               5 }t        |      5 }|j                         } |dj                  |             |j	                  dj                  |             dj                  |dz         }| j                  t        j                  |||       | j                  t        j                  ||j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzquery string is too largeselect 1zselect 2zselect 3r~   )r   r   r   ljustr   r   r   	DataError)r   ri   cxlimcusqls         r   test_large_sqlzRegressionTests.test_large_sqlW  s    ) 		K"hrl 		KcBz$%JJz'',-""3q5)C""6#3#3S"cB""6#3#3S"**cJ		K 		K 		K 		K 		K 		Ks#   C B*CC C	C  C)c                 6   t        j                  d      }|j                  d       | j                  |j                  d       d}t        |j                  d            D ]  \  }}| j                  ||      5  |j                  d|f       |j                          |dk(  r| j                  |d   d       n5|dk(  r| j                  |d   d       n|d	k(  r| j                  |d   d	       |dz  }d
d
d
        | j                  |dd       y
# 1 sw Y   xY w)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);
        rF   r   zselect c from t)r.   r   zinsert into t2(c) values (?)r~      N   z'should have returned exactly three rows)	r   r   executescriptr1   rw   	enumerater   r   r;   )r   r   counterr.   r   s        r   test_commit_cursor_resetz(RegressionTests.test_commit_cursor_resetd  s    nnZ(  	 	,,b1,= >? 
	FAss+ 	:QDA

a<$$SVQ/\$$SVQ/\$$SVQ/1	 	
	 	!%NO	 	s   8A9DD	c                     d }t        j                  d      }t        j                  |      }t        j                  ||      }|j                  |       ~~t        j                          y)zm
        The interpreter shouldn't crash in case Cursor.__init__() is called
        more than once.
        c                       y r   rs   )argss    r   callbackz/RegressionTests.test_bpo31770.<locals>.callback  s    r   r
   N)r   r   r   weakrefrefr   r   
gc_collect)r   r   r   r   r   s        r   test_bpo31770zRegressionTests.test_bpo31770  sQ    
	nnZ(mmC kk#x(Sr   c                 p    | j                  t              5  | j                  `d d d        y # 1 sw Y   y xY wr   )r^   AttributeErrorr   rw   r   s    r   !test_del_isolation_level_segfaultz1RegressionTests.test_del_isolation_level_segfault  s/    ~. 	)(	) 	) 	)s   ,5c                 j    G d d      }| j                   j                  t        j                  | j                   j                  d      | j                   j
                  fD ]P  } |       } ||j                          ||j                         | j                   j                  d        |d        R y )Nc                       e Zd Zd Zy).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)rZ   r[   r\   r   rs   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    	( 	( xx22 (()F)F!Lxx..0 	F  'y#''(#''(HHZ(4L	r   c                     | j                   j                  d      }|j                         d   }| j                  |d       y )Nz
select X''r   r   )r   r   re   r1   )r   r   vals      r   test_return_empty_bytestringz,RegressionTests.test_return_empty_bytestring  s6    hh|,llnQc"r   c                 L   t               5 }|j                         }|j                  d       |j                  dd t	        d      D               |j                          |j                  d       |j                  d       |j                          d d d        y # 1 sw Y   y xY w)Ncreate table t(t)insert into t values(?)c              3   "   K   | ]  }|f 	 y wr   rs   r   vs     r   r   zFRegressionTests.test_table_lock_cursor_replace_stmt.<locals>.<genexpr>       4aaT4r   r$   select t from tdrop table t)r   r   r   r*   r)   r;   r!   s      r   #test_table_lock_cursor_replace_stmtz3RegressionTests.test_table_lock_cursor_replace_stmt  s}     	#**,CKK+,OO545846JJLKK)*KK'JJL	 	 	s   BBB#c                 .   t               5 }|j                  d       |j                  dd t        d      D               |j	                          |j                  d      }~|j                  d       |j	                          d d d        y # 1 sw Y   y xY w)Nr   r   c              3   "   K   | ]  }|f 	 y wr   rs   r   s     r   r   zARegressionTests.test_table_lock_cursor_dealloc.<locals>.<genexpr>  r   r   r$   r   r   )r   r   r*   r)   r;   r!   s      r   test_table_lock_cursor_deallocz.RegressionTests.test_table_lock_cursor_dealloc  sw     	#KK+,OO545846JJL++/0CKK'JJL	 	 	s   A7BBc                 `   t               5 j                  d       j                  dd t        d      D               j	                          fd}j                  dd|       j                  d      }~j                  d	       j	                          d d d        y # 1 sw Y   y xY w)
Nr   r   c              3   "   K   | ]  }|f 	 y wr   rs   r   s     r   r   zMRegressionTests.test_table_lock_cursor_non_readonly_select.<locals>.<genexpr>  r   r   r$   c                 ,    j                  d| f       y )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   r*   r)   r;   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45846JJL q#.++45CKK'JJL	 	 	s   BB$$B-c                 j   t               5 }t        d      D cg c]  }|f }}|5  |j                  d       |j                  d|       d d d        g |j	                  ddfd       |j                  d       | j                  |       d d d        y c c}w # 1 sw Y   RxY w# 1 sw Y   y xY w)Nr$   r   r   stepr~   c                 (    j                  | f      S r   )r6   )r,   stepss    r   <lambda>zHRegressionTests.test_executescript_step_through_select.<locals>.<lambda>  s    U\\1$5G r   zselect step(t) from t)r   r)   r   r*   r	  r   r1   )r   r   r   r   r  s       @r   &test_executescript_step_through_selectz6RegressionTests.test_executescript_step_through_select  s     	,#$)!H-qqd-F- C/0 96BC E+GH56UF+	, 	,-C C	, 	,s3   B)
BB)$BAB)B)B&	"B))B2N)(rZ   r[   r\   r   r   r   r"   r/   r3   r8   r?   rD   rG   rQ   r`   rj   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  rs   r   r   r   r   "   s    .+
;K2"O.HB<"6?
<$3*6K
;NKP> )#
			,r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)RecursiveUseOfCursorsz$Recursive use of cursors not allowedc                    t        j                  dt         j                        | _        | j                  j	                         | _        | j
                  j                  d       | j
                  j                  dddg       y )Nr
   r   zcreate table test(x foo)r'   )r   )bar)r   r   r    r   r   r   r   r*   r   s    r   r   zRecursiveUseOfCursors.setUp  s`    >>*/5/D/DF88??$34=&1	3r   c                 l    | j                   j                          | j                  j                          y r   )r   r   r   r   s    r   r   zRecursiveUseOfCursors.tearDown  s    r   c                 :     fd}t        j                  t        j                  d|i      5   j                  j                  d        j                  t        j                   j                   j                  j                         d d d        y # 1 sw Y   y xY w)Nc                 N    j                   j                  j                        S r   )r   r   r   r,   r   s    r   r  zBRecursiveUseOfCursors.test_recursive_cursor_init.<locals>.<lambda>  s    **4884 r   INITz#select x as "x [INIT]", x from test
r   dictr   
convertersr   r   r   r   ri   r   r   convs   ` r   test_recursive_cursor_initz0RecursiveUseOfCursors.test_recursive_cursor_init  sq    4ZZ))FD>: 	6HHBC""6#:#:DHH#'88#4#46	6 	6 	6   ABBc                 :     fd}t        j                  t        j                  d|i      5   j                  j                  d        j                  t        j                   j                   j                  j                         d d d        y # 1 sw Y   y xY w)Nc                 8    j                   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  sq    )ZZ))GT?; 	6HHCD""6#:#:DHH#'88#4#46	6 	6 	6r   c                 >    g f fd	}t        j                  t        j                  d|i      5   j                  j                  d        j                  t        j                   j                   j                  j                         d d d        y # 1 sw Y   y xY w)Nc                 ^    |rj                   j                         S |j                  d       S r   )r   re   r6   )r,   lr   s     r   r  zBRecursiveUseOfCursors.test_recursive_cursor_iter.<locals>.<lambda>  s"    atxx002 QXXd^ r   ITERz#select x as "x [ITER]", x from testr  r  s   ` r   test_recursive_cursor_iterz0RecursiveUseOfCursors.test_recursive_cursor_iter  st    KZZ))FD>: 	6HHBC""6#:#:DHH#'88#4#46	6 	6 	6s   ABBN)	rZ   r[   r\   ri   r   r   r  r$  r)  rs   r   r   r  r    s     
0C3666r   r  __main__)rN   unittestsqlite3r   r   r   testr   unittest.mockr   test.test_sqlite3.test_dbapir   r   TestCaser   r  rZ   mainrs   r   r   <module>r2     sa   .        Bv,h'' v,r#6H-- #6L zHMMO r   