o
    GXhC                     @   s   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	 G dd dej
ZG dd dej
Zdd	 Zd
d ZedkrCe  dS dS )    N)support)patchc                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAS )BRegressionTestsc                 C   s   t d| _d S )N:memory:)sqliteconnectconself r   A/opt/python-3.10.19/usr/lib/python3.10/sqlite3/test/regression.pysetUp"   s   zRegressionTests.setUpc                 C   s   | j   d S N)r   closer	   r   r   r   tearDown%   s   zRegressionTests.tearDownc                 C   s   | j  }|d d S )Nzpragma user_version)r   cursorexecuter
   curr   r   r   test_pragma_user_version(   s   
z(RegressionTests.test_pragma_user_versionc                 C   sN   t jdt jd}z| j }|d W |  |  d S |  |  w )Nr   Zdetect_typeszpragma schema_version)r   r   PARSE_COLNAMESr   r   r   r   r
   r   r   r   r   r   test_pragma_schema_version-   s   

z*RegressionTests.test_pragma_schema_versionc                    s   t jddd  fddtdD }|d d tdD ]}|d d	d
d tdD  qtdD ]}|| d| d  q3   d S )Nr      )Zcached_statementsc                    s   g | ]}   qS r   )r   .0xr   r   r   
<listcomp><       z8RegressionTests.test_statement_reset.<locals>.<listcomp>r   zcreate table test(x)
   insert into test(x) values (?)c                 S   s   g | ]}|fqS r   r   r   r   r   r   r   ?   s     zselect x from test)r   r   ranger   executemanyrollback)r
   cursorsir   r   r   test_statement_reset7   s    z$RegressionTests.test_statement_resetc                 C   sN   | 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   r   r   r   test_column_name_with_spacesF   s
   


z,RegressionTests.test_column_name_with_spacesc                 C   sL   t d}g }tdD ]}| }|| |dt|  q|  d S )Nr   i   zselect 1 x union select )r   r   r$   r   appendr   strr   )r
   r   r'   r(   r   r   r   r   'test_statement_finalization_on_close_dbN   s   

z7RegressionTests.test_statement_finalization_on_close_dbc                 C   s|   t d}|d |d z|d W n
 t jy    Y nw |d z|  W d S  t jy=   | d Y d S 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   ZDatabaseErrorcommitOperationalErrorZfailr
   r   r   r   r   test_on_conflict_rollback\   s   



z)RegressionTests.test_on_conflict_rollbackc                 C   s*   	 | j d | j d | j d d S )Ncreate table foo(bar)drop table foor   r   r	   r   r   r   2test_workaround_for_buggy_sqlite_transfer_bindingsj   s   zBRegressionTests.test_workaround_for_buggy_sqlite_transfer_bindingsc                 C   s   	 | j d d S N r7   r	   r   r   r   test_empty_statements   s   z$RegressionTests.test_empty_statementc                 C   sr   	 d}t jdt jd}|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 (?)r6   zcreate table foo(bar integer)insert into foo(bar) values (5))r   r   PARSE_DECLTYPESr   datetimeZnowr   )r
   ZSELECTr   r   r   r   test_type_map_usagez   s   



z#RegressionTests.test_type_map_usagec                    sr   G  fddd}| dg t jdt jd}|d | t |d  W d    d S 1 s2w   Y  d S )Nc                          e Zd Z fddZdS )z2RegressionTests.test_bind_mutating_list.<locals>.Xc                    s       dS )Nz...)clear)r
   protocolZ
parametersr   r   __conform__   s   z>RegressionTests.test_bind_mutating_list.<locals>.X.__conform__N)__name__
__module____qualname__rD   r   rC   r   r   X       rH   r   r   r   z$create table foo(bar X, baz integer)z'insert into foo(bar, baz) values (?, ?))r   r   r=   r   assertRaises
IndexError)r
   rH   r   r   rC   r   test_bind_mutating_list   s   

"z'RegressionTests.test_bind_mutating_listc                 C   sd   |  tj}| jdttdgf  W d    n1 s w   Y  d}| |t	|j
 d S )Nz"select 'xxx' || ? || 'yyy' colname   z9Could not decode to UTF-8 column 'colname' with text 'xxx)rJ   r   r2   r   r   bytes	bytearrayfetchoneZassertInr/   	exception)r
   cmmsgr   r   r   test_error_msg_decode_error   s   z+RegressionTests.test_error_msg_decode_errorc                 C   s   	 |  ttji d  d S r   )rJ   	TypeErrorr   Zregister_adapterr	   r   r   r   test_register_adapter   s   z%RegressionTests.test_register_adapterc              
      s(  G  fdddt }td d  _dD ]*}| j|d | _|  _|  _|| _W d    n1 s9w   Y  qd  _d _dtfdtfd	tfd
tfdtfg}|D ]9\}}| j|d' | 	| | _W d    n1 svw   Y  | 
 jd W d    n1 sw   Y  qXd S )Nc                       s    e Zd Zdd Z fddZdS )z;RegressionTests.test_set_isolation_level.<locals>.CustomStrc                 S      d S r   r   r	   r   r   r   upper      zARegressionTests.test_set_isolation_level.<locals>.CustomStr.upperc                    s
   d _ d S r9   isolation_levelr	   r   r   r   __del__   s   
zCRegressionTests.test_set_isolation_level.<locals>.CustomStr.__del__N)rE   rF   rG   rX   r\   r   r   r   r   	CustomStr   s    r]   r   )r:   DEFERREDZ	IMMEDIATEZ	EXCLUSIVE)levelr^          abczIMMEDIATE EXCLUSIVE   é)r/   r   r   r[   subTestlower
capitalizerU   
ValueErrorrJ   r*   )r
   r]   r_   pairsvalueexcr   r   r   test_set_isolation_level   s2   


z(RegressionTests.test_set_isolation_levelc                 C   s   	 G dd dt j}t d}||}| t j |d  W d    n1 s+w   Y  | t jd |  W d    d S 1 sGw   Y  d S )Nc                   @      e Zd Zdd ZdS )zBRegressionTests.test_cursor_constructor_call_check.<locals>.Cursorc                 S   rW   r   r   r3   r   r   r   __init__   rY   zKRegressionTests.test_cursor_constructor_call_check.<locals>.Cursor.__init__NrE   rF   rG   rm   r   r   r   r   Cursor       ro   r   z
select 4+5z$^Base Cursor\.__init__ not called\.$)	r   ro   r   rJ   ProgrammingErrorr   fetchallassertRaisesRegexr   )r
   ro   r   r   r   r   r   "test_cursor_constructor_call_check   s   

"z2RegressionTests.test_cursor_constructor_call_checkc                 C   s*   	 G dd dt }| jd|df d S )Nc                   @   s   e Zd ZdS )z0RegressionTests.test_str_subclass.<locals>.MyStrN)rE   rF   rG   r   r   r   r   MyStr   s    ru   zselect ?rb   )r/   r   r   )r
   ru   r   r   r   test_str_subclass   s   z!RegressionTests.test_str_subclassc                 C   sV   	 G dd dt j}|d}| t j | }W d    d S 1 s$w   Y  d S )Nc                   @   rl   )zJRegressionTests.test_connection_constructor_call_check.<locals>.Connectionc                 S   rW   r   r   )r
   namer   r   r   rm      rY   zSRegressionTests.test_connection_constructor_call_check.<locals>.Connection.__init__Nrn   r   r   r   r   
Connection   rp   rx   r   )r   rx   rJ   rq   r   r
   rx   r   r   r   r   r   &test_connection_constructor_call_check   s   
"z6RegressionTests.test_connection_constructor_call_checkc                    s   	 G  fdddt j}G dd dt j |d}| }|d |dg d |d	 |  | t j |	  W d    d S 1 sIw   Y  d S )
Nc                       r@   )z<RegressionTests.test_cursor_registration.<locals>.Connectionc                    s    | S r   r   r	   ro   r   r   r      s   zCRegressionTests.test_cursor_registration.<locals>.Connection.cursorN)rE   rF   rG   r   r   r{   r   r   rx      rI   rx   c                   @   rl   )z8RegressionTests.test_cursor_registration.<locals>.Cursorc                 S   s   t j| | d S r   )r   ro   rm   r3   r   r   r   rm      s   zARegressionTests.test_cursor_registration.<locals>.Cursor.__init__Nrn   r   r   r   r   ro      rp   ro   r   zcreate table foo(x)zinsert into foo(x) values (?)))   )   )r   zselect x from foo)
r   rx   ro   r   r   r%   r&   rJ   ZInterfaceErrorrr   ry   r   r{   r   test_cursor_registration   s   


"z(RegressionTests.test_cursor_registrationc                 C   s   	 t jdd d}d S )Nr   rZ   )r   r   r3   r   r   r   test_auto_commit   s   z RegressionTests.test_auto_commitc                 C   s6   	 | j  }|d |d |d | }d S )Nr5   r<   zpragma page_size)r   r   r   rP   )r
   r   rowr   r   r   test_pragma_autocommit  s   



z&RegressionTests.test_pragma_autocommitc                 C   s   	 |  t| jd d S Nr`   )rJ   rU   r   r	   r   r   r   test_connection_call  s   z$RegressionTests.test_connection_callc                 C   s"   dd }|  tj| jjd| d S )Nc                 S   s   dS r   r   )abr   r   r   collation_cb  rY   z4RegressionTests.test_collation.<locals>.collation_cbu   )rJ   r   rq   r   Zcreate_collation)r
   r   r   r   r   test_collation  s   zRegressionTests.test_collationc                    s~   	 t d}|   d  d  fdd}| t j  ddd | D  W d    d S 1 s8w   Y  d S )	Nr   zcreate table a (bar)zcreate table b (baz)c                   3   s      dd dV  d S )Nzinsert into a (bar) values (?))r`   r`   )r   r   r   r   r   foo-  s   
z6RegressionTests.test_recursive_cursor_use.<locals>.foozinsert into b (baz) values (?)c                 s   s    | ]}|fV  qd S r   r   )r   r(   r   r   r   	<genexpr>3  s    z<RegressionTests.test_recursive_cursor_use.<locals>.<genexpr>)r   r   r   r   rJ   rq   r%   )r
   r   r   r   r   r   test_recursive_cursor_use   s   


"z)RegressionTests.test_recursive_cursor_usec                 C   s   	 t jdt jd}| }|d |d |d |d dd | D }| |td	d
d
ddddt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                 S   s   g | ]}|d  qS )r   r   r   r   r   r   r   H  r    zNRegressionTests.test_convert_timestamp_microsecond_padding.<locals>.<listcomp>i  r}         r   i@ i@ )r   r   r=   r   r   rr   r*   r>   )r
   r   r   valuesr   r   r   *test_convert_timestamp_microsecond_padding5  s   




z:RegressionTests.test_convert_timestamp_microsecond_paddingc                 C   s   | j ttjddd d S )Nr   {   rZ   )rJ   rU   r   r   r	   r   r   r   !test_invalid_isolation_level_typeO  s   
z1RegressionTests.test_invalid_isolation_level_typec                 C   sR   t d}| t|d | t|d | }| t|jd | t|jd d S )Nr   z	 select 1z	select 1 z
  select 2z	select 2 )r   r   rJ   rg   r   r   r   r   r   r   test_null_characterU  s   
z#RegressionTests.test_null_characterc              	   C   s   	 t d}|d | |jd d}t|dD ]P\}}| j||d= |d|f |  |dkr?| |d d n|dkrL| |d d n|d	krX| |d d	 |d7 }W d    n1 sfw   Y  q| |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);
        r:   r   zselect c from t)r(   r   zinsert into t2(c) values (?)r`      r|   z'should have returned exactly three rows)	r   r   Zexecutescriptr*   r[   	enumerater   rd   r1   )r
   r   Zcounterr(   r   r   r   r   test_commit_cursor_reset^  s&   



z(RegressionTests.test_commit_cursor_resetc                 C   sD   	 dd }t d}t |}t||}|| ~~t  d S )Nc                  W   rW   r   r   )argsr   r   r   callback  rY   z/RegressionTests.test_bpo31770.<locals>.callbackr   )r   r   ro   weakrefrefrm   r   
gc_collect)r
   r   r   r   r   r   r   r   test_bpo31770}  s   


zRegressionTests.test_bpo31770c                 C   s6   |  t | j`W d    d S 1 sw   Y  d S r   )rJ   AttributeErrorr   r[   r	   r   r   r   !test_del_isolation_level_segfault  s   "z1RegressionTests.test_del_isolation_level_segfaultc                 C   sf   G dd d}| j jtj| j jdd| j jfD ]}| }||j ||j | j d |d  qd S )Nc                   @   rl   )z.RegressionTests.test_bpo37347.<locals>.Printerc                 W   s   t jS r   )r   Z	SQLITE_OK)r
   r   r   r   r   log  s   z2RegressionTests.test_bpo37347.<locals>.Printer.logN)rE   rF   rG   r   r   r   r   r   Printer  rp   r   r`   )nzselect 1)r   Zset_trace_callback	functoolspartialZset_progress_handlerZset_authorizerr   r   )r
   r   methodZprinter_instancer   r   r   test_bpo37347  s   


zRegressionTests.test_bpo37347c                 C   s(   | j d}| d }| |d d S )Nz
select X''r   ra   )r   r   rP   r*   )r
   r   valr   r   r   test_return_empty_bytestring  s   z,RegressionTests.test_return_empty_bytestringN)#rE   rF   rG   r   r   r   r   r)   r,   r0   r4   r8   r;   r?   rL   rT   rV   rk   rt   rv   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   !   sB    
			r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )RecursiveUseOfCursorsz$Recursive use of cursors not allowedc                 C   s@   t jdt jd| _| j | _| jd | jdddg d S )Nr   r   zcreate table test(x foo)r"   )r   )Zbar)r   r   r   r   r   r   r   r%   r	   r   r   r   r     s   zRecursiveUseOfCursors.setUpc                 C   s   | j   | j  d S r   )r   r   r   r	   r   r   r   r     s   
zRecursiveUseOfCursors.tearDownc              	          fdd}t tjd|i/  tj j  jd W d    n1 s)w   Y  W d    d S W d    d S 1 sAw   Y  d S )Nc                    s    j  jS r   )r   rm   r   r   r	   r   r   <lambda>  s    zBRecursiveUseOfCursors.test_recursive_cursor_init.<locals>.<lambda>ZINITz#select x as "x [INIT]", x from test	r   dictr   
convertersrs   rq   rS   r   r   r
   convr   r	   r   test_recursive_cursor_init     "z0RecursiveUseOfCursors.test_recursive_cursor_initc              	      r   )Nc                    s
    j  S r   )r   r   r   r	   r   r   r     s   
 zCRecursiveUseOfCursors.test_recursive_cursor_close.<locals>.<lambda>ZCLOSEz$select x as "x [CLOSE]", x from testr   r   r   r	   r   test_recursive_cursor_close  r   z1RecursiveUseOfCursors.test_recursive_cursor_closec              	      s   g f fdd	}t tjd|i4  jd  tj j  j	  W d    n1 s0w   Y  W d    d S W d    d S 1 sHw   Y  d S )Nc                    s   |r j  S |d S r   )r   rP   r.   )r   lr	   r   r   r     s    zCRecursiveUseOfCursors.test_recursive_cursor_fetch.<locals>.<lambda>ZITERz#select x as "x [ITER]", x from test)
r   r   r   r   r   r   rs   rq   rS   rr   r   r   r	   r   test_recursive_cursor_fetch  s   "z1RecursiveUseOfCursors.test_recursive_cursor_fetchN)	rE   rF   rG   rS   r   r   r   r   r   r   r   r   r   r     s    r   c                  C   s   t tg} tdd | D S )Nc                 S   s   g | ]	}t  |qS r   )unittestZ
TestLoaderZloadTestsFromTestCase)r   tr   r   r   r     s    zsuite.<locals>.<listcomp>)r   r   r   Z	TestSuite)Ztestsr   r   r   suite  s   r   c                  C   s   t  } | t  d S r   )r   ZTextTestRunnerrunr   )Zrunnerr   r   r   test  s   r   __main__)r>   r   Zsqlite3r   r   r   r   r   Zunittest.mockr   ZTestCaser   r   r   rE   r   r   r   r   <module>   s"      $	
