o
    °ó®gW=  ã                   @   sl   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 G dd„ dejƒZ	dd„ Z
dd„ Zed	kr4eƒ  dS dS )
é    N)Úsupportc                   @   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
   úM/Users/admin/.pyenv/versions/3.10.0/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   Z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>9   ó    z8RegressionTests.test_statement_reset.<locals>.<listcomp>r   zcreate table test(x)é
   z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_reset4   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_spacesC   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_dbK   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_rollbackY   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_bindingsg   s   zBRegressionTests.test_workaround_for_buggy_sqlite_transfer_bindingsc                 C   s   	 | j  d¡ d S ©NÚ r4   r   r
   r
   r   Útest_empty_statementp   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 (?)r3   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_usagew   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__rA   r
   r@   r
   r   ÚXˆ   ó    rE   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	   rE   r   r
   r@   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)rG   r   r/   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   )rG   Ú	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   ƒ q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   ƒ qX1 sŒw   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 r6   ©Úisolation_levelr   r   r
   r   Ú__del__§   s   
zCRegressionTests.test_set_isolation_level.<locals>.CustomStr.__del__N)rB   rC   rD   rU   rY   r
   r   r
   r   Ú	CustomStr¤   s    rZ   r   )r7   ÚDEFERREDZ	IMMEDIATEZ	EXCLUSIVE)Úlevelr[   é   ó    ÚabczIMMEDIATE EXCLUSIVEõ   Ã©)r,   r   r   rX   ÚsubTestÚlowerÚ
capitalizerR   Ú
ValueErrorrG   r'   )r	   rZ   r\   ÚpairsÚvalueÚexcr
   r   r   Útest_set_isolation_level¢   s.   


üþÿýÿ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   rT   r   r
   r0   r
   r
   r   Ú__init__Æ   rV   zKRegressionTests.test_cursor_constructor_call_check.<locals>.Cursor.__init__N©rB   rC   rD   rj   r
   r
   r
   r   ÚCursorÅ   ó    rl   r   z
select 4+5z$^Base Cursor\.__init__ not called\.$)	r   rl   r   rG   ÚProgrammingErrorr   ÚfetchallZassertRaisesRegexr   )r	   rl   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)rB   rC   rD   r
   r
   r
   r   ÚMyStrÕ   s    rq   zselect ?r_   )r,   r   r   )r	   rq   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                   @   ri   )zJRegressionTests.test_connection_constructor_call_check.<locals>.Connectionc                 S   rT   r   r
   )r	   Únamer
   r
   r   rj   Þ   rV   zSRegressionTests.test_connection_constructor_call_check.<locals>.Connection.__init__Nrk   r
   r
   r
   r   Ú
ConnectionÝ   rm   rt   r   )r   rt   rG   rn   r   ©r	   rt   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   ©rl   r
   r   r   ë   s   zCRegressionTests.test_cursor_registration.<locals>.Connection.cursorN)rB   rC   rD   r   r
   rw   r
   r   rt   ê   rF   rt   c                   @   ri   )z8RegressionTests.test_cursor_registration.<locals>.Cursorc                 S   s   t j | |¡ d S r   )r   rl   rj   r0   r
   r
   r   rj   ï   s   zARegressionTests.test_cursor_registration.<locals>.Cursor.__init__Nrk   r
   r
   r
   r   rl   î   rm   rl   r   zcreate table foo(x)zinsert into foo(x) values (?)))é   )é   )r   zselect x from foo)
r   rt   rl   r   r   r"   r#   rG   ZInterfaceErrorro   ru   r
   rw   r   Útest_cursor_registrationå   s   


"ÿz(RegressionTests.test_cursor_registrationc                 C   s   	 t jdd d}d S )Nr   rW   )r   r   r0   r
   r
   r   Útest_auto_commitû   s   z RegressionTests.test_auto_commitc                 C   s6   	 | j  ¡ }| d¡ | d¡ | d¡ | ¡ }d S )Nr2   r9   zpragma page_size)r   r   r   rM   )r	   r   Úrowr
   r
   r   Útest_pragma_autocommit  s   



z&RegressionTests.test_pragma_autocommitc                 C   s   	 |   t| jd¡ d S ©Nr]   )rG   rR   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  rV   z4RegressionTests.test_collation.<locals>.collation_cbu   í²€)rG   r   rn   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>0  s   € z<RegressionTests.test_recursive_cursor_use.<locals>.<genexpr>)r   r   r   r   rG   rn   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   E  r   zNRegressionTests.test_convert_timestamp_microsecond_padding.<locals>.<listcomp>iÜ  ry   é   é   r   i@õ i@â )r   r   r:   r   r   ro   r'   r;   )r	   r   r   Úvaluesr
   r
   r   Ú*test_convert_timestamp_microsecond_padding2  s   




þz:RegressionTests.test_convert_timestamp_microsecond_paddingc                 C   s   | j ttjddd d S )Nr   é{   rW   )rG   rR   r   r   r   r
   r
   r   Ú!test_invalid_isolation_level_typeL  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   rG   rd   r   r   r   r
   r
   r   Útest_null_characterR  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   ƒ q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);
        r7   r   zselect c from t)r%   r|   zinsert into t2(c) values (?)r]   é   rx   z'should have returned exactly three rows)	r   r   Zexecutescriptr'   rX   Ú	enumerater   ra   r.   )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   rT   r   r
   )Úargsr
   r
   r   Úcallback  rV   z/RegressionTests.test_bpo31770.<locals>.callbackr   )r   r   rl   ÚweakrefÚrefrj   r   Ú
gc_collect)r	   r“   r   r   r•   r
   r
   r   Útest_bpo31770z  s   


zRegressionTests.test_bpo31770c                 C   s6   |   t¡ | j`W d   ƒ d S 1 sw   Y  d S r   )rG   ÚAttributeErrorr   rX   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                   @   ri   )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)rB   rC   rD   rš   r
   r
   r
   r   ÚPrinter  rm   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   r^   )r   r   rM   r'   )r	   r   Úvalr
   r
   r   Útest_return_empty_bytestringœ  s   z,RegressionTests.test_return_empty_bytestringN)#rB   rC   rD   r   r   r   r   r&   r)   r-   r1   r5   r8   r<   rI   rQ   rS   rh   rp   rr   rv   rz   r{   r}   r   rƒ   r‡   r‹   r   rŽ   r‘   r—   r™   r    r¢   r
   r
   r
   r   r      sB    
			r   c                  C   s   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£   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TestCaser   r¥   rB   r
   r
   r
   r   Ú<module>   s      
ÿ