a
    	¼3jè<  ã                   @   sh   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rdeƒ  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	e
 ejdk d¡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
   úS/www/server/python_manager/versions/3.9.10/lib/python3.9/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   ÚCheckPragmaUserVersion&   s    
z&RegressionTests.CheckPragmaUserVersionc                 C   sP   t jdt jd}z(| j ¡ }| d¡ W | ¡  | ¡  n| ¡  | ¡  0 d S )Nr   ©Zdetect_typeszpragma schema_version)r   r   ZPARSE_COLNAMESr   r   r   r   ©r	   r   r   r
   r
   r   ÚCheckPragmaSchemaVersion+   s    

ÿz(RegressionTests.CheckPragmaSchemaVersionc                    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 ¡ qfˆ  ¡  d S )Nr   é   )Zcached_statementsc                    s   g | ]}ˆ   ¡ ‘qS r
   )r   ©Ú.0Úx©r   r
   r   Ú
<listcomp>:   ó    z7RegressionTests.CheckStatementReset.<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   =   r   ú zselect x from test)r   r   Úranger   ÚexecutemanyÚrollback)r	   ÚcursorsÚir
   r   r   ÚCheckStatementReset5   s     z#RegressionTests.CheckStatementResetc                 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   ÚCheckColumnNameWithSpacesD   s
    


z)RegressionTests.CheckColumnNameWithSpacesc                 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   Ú#CheckStatementFinalizationOnCloseDbL   s    

z3RegressionTests.CheckStatementFinalizationOnCloseDb)é   é   r/   zneeds sqlite 3.2.2 or newerc                 C   s|   t  d¡}| d¡ | d¡ z| d¡ W n t jy@   Y n0 | d¡ z| ¡  W n t jyv   |  d¡ Y n0 d S )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   ÚCheckOnConflictRollbackZ   s    



z'RegressionTests.CheckOnConflictRollbackc                 C   s(   | j  d¡ | j  d¡ | j  d¡ d S )Núcreate table foo(bar)údrop table foo©r   r   r   r
   r
   r   Ú-CheckWorkaroundForBuggySqliteTransferBindingsi   s    z=RegressionTests.CheckWorkaroundForBuggySqliteTransferBindingsc                 C   s   | j  d¡ d S ©NÚ r6   r   r
   r
   r   ÚCheckEmptyStatementr   s    z#RegressionTests.CheckEmptyStatementc                 C   sp   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 (?)r5   zcreate table foo(bar integer)úinsert into foo(bar) values (5))r   r   ÚPARSE_DECLTYPESr   ÚdatetimeZnowr   )r	   ZSELECTr   r
   r
   r   ÚCheckTypeMapUsagey   s    



z!RegressionTests.CheckTypeMapUsagec                    sp   G ‡ fdd„dƒ}|ƒ dg‰ t jdt jd}| d¡ |  t¡ | dˆ ¡ W d   ƒ n1 sb0    Y  d S )Nc                       s   e Zd Z‡ fdd„ZdS )z0RegressionTests.CheckBindMutatingList.<locals>.Xc                    s   ˆ   ¡  dS )Nz...)Úclear)r	   Úprotocol©Ú
parametersr
   r   Ú__conform__‹   s    z<RegressionTests.CheckBindMutatingList.<locals>.X.__conform__N)Ú__name__Ú
__module__Ú__qualname__rC   r
   rA   r
   r   ÚXŠ   s   rG   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	   rG   r   r
   rA   r   ÚCheckBindMutatingListˆ   s    

z%RegressionTests.CheckBindMutatingListc                 C   sd   |   tj¡.}| j dttdgƒƒf¡ ¡  W d   ƒ n1 s@0    Y  d}|  |t	|j
ƒ¡ d S )Nz"select 'xxx' || ? || 'yyy' colnameéú   z9Could not decode to UTF-8 column 'colname' with text 'xxx)rH   r   r1   r   r   ÚbytesÚ	bytearrayÚfetchoneZassertInr,   Ú	exception)r	   ÚcmÚmsgr
   r
   r   ÚCheckErrorMsgDecodeError•   s    ÿ&z(RegressionTests.CheckErrorMsgDecodeErrorc                 C   s   |   ttji d ¡ d S r   )rH   Ú	TypeErrorr   Zregister_adapterr   r
   r
   r   ÚCheckRegisterAdapterž   s    z$RegressionTests.CheckRegisterAdapterc              
      s*  G ‡ fdd„dt ƒ}t d¡‰ d ˆ _dD ]T}| j|d4 |ˆ _| ¡ ˆ _| ¡ ˆ _||ƒˆ _W d   ƒ q(1 sr0    Y  q(d ˆ _dˆ _dtfdtfd	tfd
tfdtfg}|D ]t\}}| j|dN |  	|¡ |ˆ _W d   ƒ n1 sì0    Y  |  
ˆ jd¡ W d   ƒ q°1 s0    Y  q°d S )Nc                       s    e Zd Zdd„ Z‡ fdd„ZdS )z9RegressionTests.CheckSetIsolationLevel.<locals>.CustomStrc                 S   s   d S r   r
   r   r
   r
   r   Úupper§   s    z?RegressionTests.CheckSetIsolationLevel.<locals>.CustomStr.upperc                    s
   dˆ _ d S r8   ©Úisolation_levelr   r   r
   r   Ú__del__©   s    zARegressionTests.CheckSetIsolationLevel.<locals>.CustomStr.__del__N)rD   rE   rF   rU   rX   r
   r   r
   r   Ú	CustomStr¦   s   rY   r   )r9   ÚDEFERREDZ	IMMEDIATEZ	EXCLUSIVE)ÚlevelrZ   é   r   ÚabczIMMEDIATE EXCLUSIVEõ   Ã©)r,   r   r   rW   ÚsubTestÚlowerÚ
capitalizerS   Ú
ValueErrorrH   r'   )r	   rY   r[   ÚpairsÚvalueÚexcr
   r   r   ÚCheckSetIsolationLevel¤   s&    


*þ$z&RegressionTests.CheckSetIsolationLevelc                 C   s˜   G dd„ dt jƒ}t  d¡}||ƒ}|  t j¡ | d¡ ¡  W d   ƒ n1 sT0    Y  |  t jd¡ | ¡  W d   ƒ n1 sŠ0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )z?RegressionTests.CheckCursorConstructorCallCheck.<locals>.Cursorc                 S   s   d S r   r
   r2   r
   r
   r   Ú__init__È   s    zHRegressionTests.CheckCursorConstructorCallCheck.<locals>.Cursor.__init__N©rD   rE   rF   rg   r
   r
   r
   r   ÚCursorÇ   s   ri   r   z
select 4+5z$^Base Cursor\.__init__ not called\.$)	r   ri   r   rH   ÚProgrammingErrorr   ÚfetchallZassertRaisesRegexr   )r	   ri   r   r   r
   r
   r   ÚCheckCursorConstructorCallCheckÂ   s    
,ÿz/RegressionTests.CheckCursorConstructorCallCheckc                 C   s(   G dd„ dt ƒ}| j d|dƒf¡ d S )Nc                   @   s   e Zd ZdS )z/RegressionTests.CheckStrSubclass.<locals>.MyStrN)rD   rE   rF   r
   r
   r
   r   ÚMyStr×   r   rm   zselect ?r]   )r,   r   r   )r	   rm   r
   r
   r   ÚCheckStrSubclassÓ   s    z RegressionTests.CheckStrSubclassc                 C   sR   G dd„ dt jƒ}|dƒ}|  t j¡ | ¡ }W d   ƒ n1 sD0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )zGRegressionTests.CheckConnectionConstructorCallCheck.<locals>.Connectionc                 S   s   d S r   r
   )r	   Únamer
   r
   r   rg   à   s    zPRegressionTests.CheckConnectionConstructorCallCheck.<locals>.Connection.__init__Nrh   r
   r
   r
   r   Ú
Connectionß   s   rp   r   )r   rp   rH   rj   r   ©r	   rp   r   r   r
   r
   r   Ú#CheckConnectionConstructorCallCheckÚ   s    z3RegressionTests.CheckConnectionConstructorCallCheckc                    sœ   G ‡ fdd„dt jƒ}G dd„ dt jƒ‰ |dƒ}| ¡ }| d¡ | dg d¢¡ | d	¡ | ¡  |  t j¡ | 	¡  W d   ƒ n1 sŽ0    Y  d S )
Nc                       s   e Zd Z‡ fdd„ZdS )z;RegressionTests.CheckCursorRegistration.<locals>.Connectionc                    s   ˆ | ƒS r   r
   r   ©ri   r
   r   r   í   s    zBRegressionTests.CheckCursorRegistration.<locals>.Connection.cursorN)rD   rE   rF   r   r
   rs   r
   r   rp   ì   s   rp   c                   @   s   e Zd Zdd„ ZdS )z7RegressionTests.CheckCursorRegistration.<locals>.Cursorc                 S   s   t j | |¡ d S r   )r   ri   rg   r2   r
   r
   r   rg   ñ   s    z@RegressionTests.CheckCursorRegistration.<locals>.Cursor.__init__Nrh   r
   r
   r
   r   ri   ð   s   ri   r   zcreate table foo(x)zinsert into foo(x) values (?)))r.   )é   )r   zselect x from foo)
r   rp   ri   r   r   r"   r#   rH   ZInterfaceErrorrk   rq   r
   rs   r   ÚCheckCursorRegistrationç   s    

z'RegressionTests.CheckCursorRegistrationc                 C   s   t jdd d}d S )Nr   rV   )r   r   r2   r
   r
   r   ÚCheckAutoCommitý   s    zRegressionTests.CheckAutoCommitc                 C   s4   | j  ¡ }| d¡ | d¡ | d¡ | ¡ }d S )Nr4   r;   zpragma page_size)r   r   r   rN   )r	   r   Úrowr
   r
   r   ÚCheckPragmaAutocommit  s
    



z%RegressionTests.CheckPragmaAutocommitc                 C   s   |   t| jd¡ d S ©Nr\   )rH   rS   r   r   r
   r
   r   ÚCheckConnectionCall  s    z#RegressionTests.CheckConnectionCallc                 C   s"   dd„ }|   tj| jjd|¡ d S )Nc                 S   s   dS ry   r
   )ÚaÚbr
   r
   r   Úcollation_cb  s    z4RegressionTests.CheckCollation.<locals>.collation_cbu   í²€)rH   r   rj   r   Zcreate_collation)r	   r}   r
   r
   r   ÚCheckCollation  s    þzRegressionTests.CheckCollationc                    sz   t  d¡}| ¡ ‰ ˆ  d¡ ˆ  d¡ ‡ fdd„}|  t j¡( ˆ  ddd„ |ƒ D ƒ¡ W d   ƒ n1 sl0    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    z4RegressionTests.CheckRecursiveCursorUse.<locals>.foozinsert into b (baz) values (?)c                 s   s   | ]}|fV  qd S r   r
   )r   r%   r
   r
   r   Ú	<genexpr>2  r   z:RegressionTests.CheckRecursiveCursorUse.<locals>.<genexpr>)r   r   r   r   rH   rj   r"   )r	   r   r€   r
   r   r   ÚCheckRecursiveCursorUse  s    


ÿz'RegressionTests.CheckRecursiveCursorUsec                 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   G  r   zKRegressionTests.CheckConvertTimestampMicrosecondPadding.<locals>.<listcomp>iÜ  rt   é   é   r   i@õ i@â )r   r   r<   r   r   rk   r'   r=   )r	   r   r   Úvaluesr
   r
   r   Ú'CheckConvertTimestampMicrosecondPadding4  s    



þz7RegressionTests.CheckConvertTimestampMicrosecondPaddingc                 C   s   | j ttjddd d S )Nr   é{   rV   )rH   rS   r   r   r   r
   r
   r   ÚCheckInvalidIsolationLevelTypeN  s    ÿz.RegressionTests.CheckInvalidIsolationLevelTypec                 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   rH   rb   r   r   r   r
   r
   r   ÚCheckNullCharacterT  s    
z"RegressionTests.CheckNullCharacterc              	   C   sè   t  d¡}| d¡ |  |jd¡ d}t| d¡ƒD ] \}}| j||dz | d|f¡ | ¡  |dkr||  |d d¡ n2|dkr–|  |d d¡ n|d	kr®|  |d d	¡ |d7 }W d   ƒ q41 sÊ0    Y  q4|  |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);
        r9   r   zselect c from t)r%   rw   zinsert into t2(c) values (?)r\   r/   r.   z'should have returned exactly three rows)	r   r   Zexecutescriptr'   rW   Ú	enumerater   r_   r0   )r	   r   Zcounterr%   rw   r
   r
   r   ÚCheckCommitCursorReset]  s     

(z&RegressionTests.CheckCommitCursorResetc                 C   sB   dd„ }t  d¡}t  |¡}t ||¡}| |¡ ~~t ¡  d S )Nc                  W   s   d S r   r
   )Úargsr
   r
   r   Úcallback  s    z/RegressionTests.CheckBpo31770.<locals>.callbackr   )r   r   ri   ÚweakrefÚrefrg   r   Ú
gc_collect)r	   r   r   r   r   r
   r
   r   ÚCheckBpo31770|  s    


zRegressionTests.CheckBpo31770c                 C   s4   |   t¡ | j`W d   ƒ n1 s&0    Y  d S r   )rH   ÚAttributeErrorr   rW   r   r
   r
   r   ÚCheckDelIsolation_levelSegfaultŒ  s    z/RegressionTests.CheckDelIsolation_levelSegfaultc                 C   sf   G dd„ dƒ}| j jtj| j jdd| j jfD ]2}|ƒ }||jƒ ||jƒ | j  d¡ |d ƒ q.d S )Nc                   @   s   e Zd Zdd„ ZdS )z.RegressionTests.CheckBpo37347.<locals>.Printerc                 W   s   t jS r   )r   Z	SQLITE_OK)r	   rŒ   r
   r
   r   Úlog’  s    z2RegressionTests.CheckBpo37347.<locals>.Printer.logN)rD   rE   rF   r”   r
   r
   r
   r   ÚPrinter‘  s   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   ÚCheckBpo37347  s    þ

zRegressionTests.CheckBpo37347N)&rD   rE   rF   r   r   r   r   r&   r)   r-   ÚunittestZskipIfr   Zsqlite_version_infor3   r7   r:   r>   rJ   rR   rT   rf   rl   rn   rr   ru   rv   rx   rz   r~   r‚   r†   rˆ   r‰   r‹   r‘   r“   rš   r
   r
   r
   r   r      s@   

			r   c                  C   s   t  td¡} t  | f¡S )NZCheck)r›   Z	makeSuiter   Z	TestSuite)Zregression_suiter
   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œ   rD   r
   r
   r
   r   Ú<module>   s      