HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/sqlite3/test/__pycache__/dbapi.cpython-37.pyc
B

��g(��@s�ddlZddlZddlZddlmZmZGdd�dej�ZGdd�dej�Z	Gdd�dej�Z
Gd	d
�d
ej�ZGdd�dej�ZGd
d�dej�Z
Gdd�dej�ZGdd�dej�ZGdd�dej�Zdd�Zdd�Zedkr�e�dS)�N)�TESTFN�unlinkc@steZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�ModuleTestscCs|�tjddtj�dS)Nz2.0zapilevel is %s, should be 2.0)�assertEqual�sqliteZapilevel)�self�r�./usr/local/lib/python3.7/sqlite3/test/dbapi.py�
CheckAPILevel s
zModuleTests.CheckAPILevelcCs|�tjddtj�dS)N�zthreadsafety is %d, should be 1)rrZthreadsafety)rrrr	�CheckThreadSafety$s
zModuleTests.CheckThreadSafetycCs|�tjddtj�dS)NZqmarkz%paramstyle is '%s', should be 'qmark')rrZ
paramstyle)rrrr	�CheckParamStyle(s
zModuleTests.CheckParamStylecCs|�ttjt�d�dS)Nz&Warning is not a subclass of Exception)�
assertTrue�
issubclassr�Warning�	Exception)rrrr	�CheckWarning-szModuleTests.CheckWarningcCs|�ttjt�d�dS)Nz$Error is not a subclass of Exception)rrr�Errorr)rrrr	�
CheckError1szModuleTests.CheckErrorcCs|�ttjtj�d�dS)Nz)InterfaceError is not a subclass of Error)rrr�InterfaceErrorr)rrrr	�CheckInterfaceError5szModuleTests.CheckInterfaceErrorcCs|�ttjtj�d�dS)Nz(DatabaseError is not a subclass of Error)rrr�
DatabaseErrorr)rrrr	�CheckDatabaseError9szModuleTests.CheckDatabaseErrorcCs|�ttjtj�d�dS)Nz,DataError is not a subclass of DatabaseError)rrr�	DataErrorr)rrrr	�CheckDataError=szModuleTests.CheckDataErrorcCs|�ttjtj�d�dS)Nz3OperationalError is not a subclass of DatabaseError)rrr�OperationalErrorr)rrrr	�CheckOperationalErrorAsz!ModuleTests.CheckOperationalErrorcCs|�ttjtj�d�dS)Nz1IntegrityError is not a subclass of DatabaseError)rrr�IntegrityErrorr)rrrr	�CheckIntegrityErrorEszModuleTests.CheckIntegrityErrorcCs|�ttjtj�d�dS)Nz0InternalError is not a subclass of DatabaseError)rrr�
InternalErrorr)rrrr	�CheckInternalErrorIszModuleTests.CheckInternalErrorcCs|�ttjtj�d�dS)Nz3ProgrammingError is not a subclass of DatabaseError)rrr�ProgrammingErrorr)rrrr	�CheckProgrammingErrorMsz!ModuleTests.CheckProgrammingErrorcCs|�ttjtj�d�dS)Nz4NotSupportedError is not a subclass of DatabaseError)rrr�NotSupportedErrorr)rrrr	�CheckNotSupportedErrorQs
z"ModuleTests.CheckNotSupportedErrorN)�__name__�
__module__�__qualname__r
rr
rrrrrrrr r"r$rrrr	rsrc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Ze�ejdkd�dd ��Zd!S)"�ConnectionTestscCs0t�d�|_|j��}|�d�|�dd�dS)Nz:memory:z4create table test(id integer primary key, name text)z!insert into test(name) values (?))�foo)r�connect�cx�cursor�execute)r�currr	�setUpXs

zConnectionTests.setUpcCs|j��dS)N)r+�close)rrrr	�tearDown^szConnectionTests.tearDowncCs|j��dS)N)r+�commit)rrrr	�CheckCommitaszConnectionTests.CheckCommitcCs|j��|j��dS)zV
        A commit should also work when no changes were made to the database.
        N)r+r2)rrrr	�CheckCommitAfterNoChangesds
z)ConnectionTests.CheckCommitAfterNoChangescCs|j��dS)N)r+�rollback)rrrr	�
CheckRollbackkszConnectionTests.CheckRollbackcCs|j��|j��dS)zX
        A rollback should also work when no changes were made to the database.
        N)r+r5)rrrr	�CheckRollbackAfterNoChangesns
z+ConnectionTests.CheckRollbackAfterNoChangescCs|j��}dS)N)r+r,)rr.rrr	�CheckCursoruszConnectionTests.CheckCursorc	Cs*d}|�tj��t�|�}WdQRXdS)Nz/foo/bar/bla/23534/mydb.db)�assertRaisesrrr*)rZYOU_CANNOT_OPEN_THIS�conrrr	�CheckFailedOpenxszConnectionTests.CheckFailedOpencCs|j��dS)N)r+r0)rrrr	�
CheckClose}szConnectionTests.CheckClosecCs�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jjtj�|�|jj	tj	�|�|jj
tj
�|�|jjtj�|�|jjtj�dS)N)
rr+rrrrrrrrrr!r#)rrrr	�CheckExceptions�szConnectionTests.CheckExceptionscCs�t�d�}|��}|�|jd�|�d�|�|jd�|�dd�|�|jd�|�ddg�|��}|�|jd�|��|�|jd�|�ddg�|��}|�|jd�dS)	Nz:memory:Fz?create table transactiontest(id integer primary key, name text)z,insert into transactiontest(name) values (?))r)Tz-select name from transactiontest where name=?r))rr*r,r�in_transactionr-�fetchoner2)rr+r.�rowrrr	�CheckInTransaction�s

z"ConnectionTests.CheckInTransactionc	Cs"|�t��d|j_WdQRXdS)NT)r9�AttributeErrorr+r>)rrrr	�CheckInTransactionRO�sz$ConnectionTests.CheckInTransactionROc	CsD|�tt�Gdd�d�}|�}t�|��}|�d�WdQRXdS)z| Checks that we can successfully connect to a database using an object that
            is PathLike, i.e. has __fspath__(). c@seZdZdd�ZdS)z9ConnectionTests.CheckOpenWithPathLikeObject.<locals>.PathcSstS)N)r)rrrr	�
__fspath__�szDConnectionTests.CheckOpenWithPathLikeObject.<locals>.Path.__fspath__N)r%r&r'rDrrrr	�Path�srEzcreate table test(id integer)N)�
addCleanuprrrr*r-)rrE�pathr+rrr	�CheckOpenWithPathLikeObject�s
z+ConnectionTests.CheckOpenWithPathLikeObjectc
Cs�tjdkr4|�tj��tjddd�WdQRXdS|�tt�t�t��}|�d�WdQRXtjdtdd��}|�d�WdQRXtjdtddd��(}|�tj	��|�d	�WdQRXWdQRXdS)
N)��rJz:memory:T)Zurizcreate table test(id integer)zfile:zinsert into test(id) values(0)z?mode=rozinsert into test(id) values(1))
r�sqlite_version_infor9r#r*rFrrr-r)rr+rrr	�CheckOpenUri�s
zConnectionTests.CheckOpenUri)rIrIrz&needs sqlite versions older than 3.3.1c	Cs<|�tj��}tjddd�WdQRX|�t|j�d�dS)Nz:memory:F)Zcheck_same_threadz shared connections not available)r9rr#r*r�str�	exception)r�cmrrr	� CheckSameThreadErrorOnOldVersion�sz0ConnectionTests.CheckSameThreadErrorOnOldVersionN)r%r&r'r/r1r3r4r6r7r8r;r<r=rArCrHrL�unittestZskipIfrrKrPrrrr	r(Vs 
r(c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQdR�Z+dSdT�Z,dUdV�Z-dWdX�Z.dYdZ�Z/d[d\�Z0d]d^�Z1d_d`�Z2dadb�Z3dcdd�Z4deS)f�CursorTestscCs6t�d�|_|j��|_|j�d�|j�dd�dS)Nz:memory:z\create table test(id integer primary key, name text, income number, unique_test text unique)z!insert into test(name) values (?))r))rr*r+r,r.r-)rrrr	r/�s
zCursorTests.setUpcCs|j��|j��dS)N)r.r0r+)rrrr	r1�s
zCursorTests.tearDowncCs|j�d�dS)Nzdelete from test)r.r-)rrrr	�CheckExecuteNoArgs�szCursorTests.CheckExecuteNoArgsc	Cs(|�tj��|j�d�WdQRXdS)Nzselect asdf)r9rrr.r-)rrrr	�CheckExecuteIllegalSql�sz"CursorTests.CheckExecuteIllegalSqlc	Cs(|�tj��|j�d�WdQRXdS)Nzselect 5+4; select 4+5)r9rrr.r-)rrrr	�CheckExecuteTooMuchSql�sz"CursorTests.CheckExecuteTooMuchSqlcCs|j�d�dS)Nzselect 5+4; -- foo bar)r.r-)rrrr	�CheckExecuteTooMuchSql2�sz#CursorTests.CheckExecuteTooMuchSql2cCs|j�d�dS)NzT
            select 5+4;

            /*
            foo
            */
            )r.r-)rrrr	�CheckExecuteTooMuchSql3�sz#CursorTests.CheckExecuteTooMuchSql3c	Cs&|�t��|j�d�WdQRXdS)N�*)r9�
ValueErrorr.r-)rrrr	�CheckExecuteWrongSqlArg�sz#CursorTests.CheckExecuteWrongSqlArgcCs|j�dd�dS)Nzinsert into test(id) values (?))rX)r.r-)rrrr	�CheckExecuteArgInt�szCursorTests.CheckExecuteArgIntcCs|j�dd�dS)Nz#insert into test(income) values (?))gq=
ף��@)r.r-)rrrr	�CheckExecuteArgFloat�sz CursorTests.CheckExecuteArgFloatcCs|j�dd�dS)Nz!insert into test(name) values (?))ZHugo)r.r-)rrrr	�CheckExecuteArgString�sz!CursorTests.CheckExecuteArgStringcCs@|j�dd�|j�d|jjf�|j��}|�|dd�dS)Nz!insert into test(name) values (?))zHugoz select name from test where id=?rzHugo)r.r-�	lastrowidr?r)rr@rrr	�!CheckExecuteArgStringWithZeroByte�s
z-CursorTests.CheckExecuteArgStringWithZeroBytec	Cs:|�t��}|j�dd�WdQRX|�t|j�d�dS)Nzinsert into test(id) values (?)rXz"parameters are of unsupported type)r9rYr.r-rrMrN)rrOrrr	�CheckExecuteNonIterable�sz#CursorTests.CheckExecuteNonIterablec	Cs*|�tj��|j�dd�WdQRXdS)Nzinsert into test(id) values (?))�ZEgon)r9rr!r.r-)rrrr	�CheckExecuteWrongNoOfArgs1sz&CursorTests.CheckExecuteWrongNoOfArgs1c	Cs(|�tj��|j�d�WdQRXdS)Nzinsert into test(id) values (?))r9rr!r.r-)rrrr	�CheckExecuteWrongNoOfArgs2sz&CursorTests.CheckExecuteWrongNoOfArgs2c	Cs(|�tj��|j�d�WdQRXdS)Nzinsert into test(id) values (?))r9rr!r.r-)rrrr	�CheckExecuteWrongNoOfArgs3sz&CursorTests.CheckExecuteWrongNoOfArgs3cCs:|j�d�|j�ddg�|j��}|�|dd�dS)Nz%insert into test(name) values ('foo')z"select name from test where name=?r)r)r.r-r?r)rr@rrr	�CheckExecuteParamLists
z!CursorTests.CheckExecuteParamListcCsJGdd�dt�}|j�d�|j�d|��|j��}|�|dd�dS)Nc@seZdZdd�Zdd�ZdS)z0CursorTests.CheckExecuteParamSequence.<locals>.LcSsdS)Nrr)rrrr	�__len__sz8CursorTests.CheckExecuteParamSequence.<locals>.L.__len__cSs|dkst�dS)Nrr))�AssertionError)r�xrrr	�__getitem__sz<CursorTests.CheckExecuteParamSequence.<locals>.L.__getitem__N)r%r&r'rfrirrrr	�Lsrjz%insert into test(name) values ('foo')z"select name from test where name=?rr))�objectr.r-r?r)rrjr@rrr	�CheckExecuteParamSequences

z%CursorTests.CheckExecuteParamSequencecCs<|j�d�|j�dddi�|j��}|�|dd�dS)Nz%insert into test(name) values ('foo')z&select name from test where name=:name�namer)r)r.r-r?r)rr@rrr	�CheckExecuteDictMapping#s
z#CursorTests.CheckExecuteDictMappingcCsJGdd�dt�}|j�d�|j�d|��|j��}|�|dd�dS)Nc@seZdZdd�ZdS)z6CursorTests.CheckExecuteDictMapping_Mapping.<locals>.DcSsdS)Nr)r)r�keyrrr	�__missing__+szBCursorTests.CheckExecuteDictMapping_Mapping.<locals>.D.__missing__N)r%r&r'rprrrr	�D*srqz%insert into test(name) values ('foo')z&select name from test where name=:namerr))�dictr.r-r?r)rrqr@rrr	�CheckExecuteDictMapping_Mapping)s

z+CursorTests.CheckExecuteDictMapping_Mappingc	Cs:|j�d�|�tj��|j�dddi�WdQRXdS)Nz%insert into test(name) values ('foo')z1select name from test where name=:name and id=:idrmr))r.r-r9rr!)rrrr	�$CheckExecuteDictMappingTooLittleArgs3sz0CursorTests.CheckExecuteDictMappingTooLittleArgsc	Cs4|j�d�|�tj��|j�d�WdQRXdS)Nz%insert into test(name) values ('foo')z&select name from test where name=:name)r.r-r9rr!)rrrr	�CheckExecuteDictMappingNoArgs8sz)CursorTests.CheckExecuteDictMappingNoArgsc	Cs:|j�d�|�tj��|j�dddi�WdQRXdS)Nz%insert into test(name) values ('foo')z"select name from test where name=?rmr))r.r-r9rr!)rrrr	�CheckExecuteDictMappingUnnamed=sz*CursorTests.CheckExecuteDictMappingUnnamedcCs|j��dS)N)r.r0)rrrr	r<BszCursorTests.CheckClosecCsD|j�d�|j�d�|j�d�|j�d�|�|jjd�dS)Nzdelete from testz%insert into test(name) values ('foo')zupdate test set name='bar'�)r.r-r�rowcount)rrrr	�CheckRowcountExecuteEs
z CursorTests.CheckRowcountExecutecCs |j�d�|�|jjd�dS)z�
        pysqlite does not know the rowcount of SELECT statements, because we
        don't fetch all rows after executing the select statement. The rowcount
        has thus to be -1.
        zselect 5 union select 6���N)r.r-rrx)rrrr	�CheckRowcountSelectLszCursorTests.CheckRowcountSelectcCs4|j�d�|j�ddddg�|�|jjd�dS)Nzdelete from testz!insert into test(name) values (?))r)rw)rIrI)r.r-�executemanyrrx)rrrr	�CheckRowcountExecutemanyUsz$CursorTests.CheckRowcountExecutemanycCs0|j�d�|j�d�|jd|jjdd�dS)Nz%insert into test(name) values ('foo')rwz"total changes reported wrong value)�msg)r.r-Z
assertLessr+Z
total_changes)rrrr	�CheckTotalChangesZszCursorTests.CheckTotalChangescCs"|j�ddd�tdd�D��dS)Nz#insert into test(income) values (?)cSsg|]
}|f�qSrr)�.0rhrrr	�
<listcomp>dsz8CursorTests.CheckExecuteManySequence.<locals>.<listcomp>�d�n)r.r|�range)rrrr	�CheckExecuteManySequencecsz$CursorTests.CheckExecuteManySequencecCs"Gdd�d�}|j�d|��dS)Nc@seZdZdd�Zdd�ZdS)z4CursorTests.CheckExecuteManyIterator.<locals>.MyItercSs
d|_dS)N�)�value)rrrr	�__init__hsz=CursorTests.CheckExecuteManyIterator.<locals>.MyIter.__init__cSs*|jdkrt�n|jd7_|jfSdS)N�
r)r��
StopIteration)rrrr	�__next__ks
z=CursorTests.CheckExecuteManyIterator.<locals>.MyIter.__next__N)r%r&r'r�r�rrrr	�MyItergsr�z#insert into test(income) values (?))r.r|)rr�rrr	�CheckExecuteManyIteratorfsz$CursorTests.CheckExecuteManyIteratorcCsdd�}|j�d|��dS)Ncssxtd�D]}|fVq
WdS)Nr�)r�)�irrr	�mygenusz4CursorTests.CheckExecuteManyGenerator.<locals>.mygenz#insert into test(income) values (?))r.r|)rr�rrr	�CheckExecuteManyGeneratortsz%CursorTests.CheckExecuteManyGeneratorc	Cs*|�t��|j�ddg�WdQRXdS)NrX)rI)r9rYr.r|)rrrr	�CheckExecuteManyWrongSqlArg{sz'CursorTests.CheckExecuteManyWrongSqlArgc	Cs,|�tj��|j�ddg�WdQRXdS)Nzselect ?)rI)r9rr!r.r|)rrrr	�CheckExecuteManySelectsz"CursorTests.CheckExecuteManySelectc	Cs(|�t��|j�dd�WdQRXdS)Nz#insert into test(income) values (?)rX)r9�	TypeErrorr.r|)rrrr	�CheckExecuteManyNotIterable�sz'CursorTests.CheckExecuteManyNotIterablecCsz|j�d�|j�dd�|j�dd�|j�d�g}x|jD]}|�|d�q@W|�|dd�|�|dd	�dS)
Nzdelete from testzinsert into test(id) values (?))r�)�zselect id from test order by idrr�rr�)r.r-�appendr)rZlstr@rrr	�CheckFetchIter�szCursorTests.CheckFetchItercCs@|j�d�|j��}|�|dd�|j��}|�|d�dS)Nzselect name from testrr))r.r-r?r)rr@rrr	�
CheckFetchone�s


zCursorTests.CheckFetchonecCs"|j��}|��}|�|d�dS)N)r+r,r?r)r�curr@rrr	�CheckFetchoneNoStatement�s
z$CursorTests.CheckFetchoneNoStatementcCsr|�|jjd�d|j_|j�d�|j�d�|j�d�|j�d�|j�d�|j��}|�t|�d�dS)Nrrwzdelete from testz#insert into test(name) values ('A')z#insert into test(name) values ('B')z#insert into test(name) values ('C')zselect name from test)rr.Z	arraysizer-�	fetchmany�len)r�resrrr	�CheckArraySize�s
zCursorTests.CheckArraySizecCsD|j�d�|j�d�}|�t|�d�|j�d�}|�|g�dS)Nzselect name from testr�r)r.r-r�rr�)rr�rrr	�CheckFetchmany�s
zCursorTests.CheckFetchmanycCs.|j�d�|jjdd�}|�t|�d�dS)z0Checks if fetchmany works with keyword argumentszselect name from testr�)�sizerN)r.r-r�rr�)rr�rrr	�CheckFetchmanyKwArg�szCursorTests.CheckFetchmanyKwArgcCs@|j�d�|j��}|�t|�d�|j��}|�|g�dS)Nzselect name from testr)r.r-�fetchallrr�)rr�rrr	�
CheckFetchall�s


zCursorTests.CheckFetchallcCs|j�dddg�dS)NrI�r�)r.Z
setinputsizes)rrrr	�CheckSetinputsizes�szCursorTests.CheckSetinputsizescCs|j�dd�dS)Nr�r)r.�
setoutputsize)rrrr	�CheckSetoutputsize�szCursorTests.CheckSetoutputsizecCs|j�d�dS)NrX)r.r�)rrrr	�CheckSetoutputsizeNoColumn�sz&CursorTests.CheckSetoutputsizeNoColumncCs|�|jj|j�dS)N)rr.Z
connectionr+)rrrr	�CheckCursorConnection�sz!CursorTests.CheckCursorConnectionc	Cs.|�t��dd�}|j�|�}WdQRXdS)NcSsdS)Nrrrrr	�f��z/CursorTests.CheckWrongCursorCallable.<locals>.f)r9r�r+r,)rr�r�rrr	�CheckWrongCursorCallable�sz$CursorTests.CheckWrongCursorCallablec	Cs8Gdd�d�}|�}|�t��t�|�}WdQRXdS)Nc@seZdZdS)z.CursorTests.CheckCursorWrongClass.<locals>.FooN)r%r&r'rrrr	�Foo�sr�)r9r�rZCursor)rr�r)r�rrr	�CheckCursorWrongClass�sz!CursorTests.CheckCursorWrongClassc
CsRd}xHdD]@}|j|d��*|j�|�|�d�|�|jjd�WdQRXq
WdS)zV
        INSERT OR REPLACE and REPLACE INTO should produce the same behavior.
        z+{} INTO test(id, unique_test) VALUES (?, ?))zINSERT OR REPLACEZREPLACE)�	statement)rr)rN)�subTestr.r-�formatrr^)r�sqlr�rrr	�CheckLastRowIDOnReplace�s

z#CursorTests.CheckLastRowIDOnReplacecCs@|j�dd�|�|jjd�|j�dd�|�|jjd�dS)Nz2insert or ignore into test(unique_test) values (?))�testrw)r.r-rr^)rrrr	�CheckLastRowIDOnIgnore�sz"CursorTests.CheckLastRowIDOnIgnorecCs�g}x�dD]�}d}|jd�|�d��n|j�|�|�|f�|�||jjf�|�tj��|j�|�|�|f�WdQRX|�||jjf�WdQRXq
Wddddddg}|�	||�dS)N)�FAIL�ABORT�ROLLBACKz.INSERT OR {} INTO test(unique_test) VALUES (?)zINSERT OR {})r�)r�rw)r�rI)r�r�)
r�r�r.r-r�r^r9rrr)r�resultsr�r�Zexpectedrrr	�CheckLastRowIDInsertOR�s
  z"CursorTests.CheckLastRowIDInsertORN)5r%r&r'r/r1rSrTrUrVrWrZr[r\r]r_r`rbrcrdrerlrnrsrtrurvr<ryr{r}rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr	rR�sd		

		

rRc@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�ThreadTestscCs(t�d�|_|j��|_|j�d�dS)Nz:memory:z\create table test(id integer primary key, name text, bin binary, ratio number, ts timestamp))rr*r:r,r�r-)rrrr	r/szThreadTests.setUpcCs|j��|j��dS)N)r�r0r:)rrrr	r1s
zThreadTests.tearDowncCsRdd�}g}tj||j|d�d�}|��|��t|�dkrN|�d�|��dS)NcSsFy|��}|�d�dStjk
r,dS|�d�YnXdS)Nzdid not raise ProgrammingErrorzraised wrong exception)r,r�rr!)r:�errorsr�rrr	�run
s
z'ThreadTests.CheckConCursor.<locals>.run)r:r�)�target�kwargsr�
)�	threading�Threadr:�start�joinr��fail)rr�r��trrr	�CheckConCursors
zThreadTests.CheckConCursorcCsRdd�}g}tj||j|d�d�}|��|��t|�dkrN|�d�|��dS)NcSsFy|��|�d�dStjk
r,dS|�d�YnXdS)Nzdid not raise ProgrammingErrorzraised wrong exception)r2r�rr!)r:r�rrr	r�s
z'ThreadTests.CheckConCommit.<locals>.run)r:r�)r�r�rr�)r�r�r:r�r�r�r�)rr�r�r�rrr	�CheckConCommits
zThreadTests.CheckConCommitcCsRdd�}g}tj||j|d�d�}|��|��t|�dkrN|�d�|��dS)NcSsFy|��|�d�dStjk
r,dS|�d�YnXdS)Nzdid not raise ProgrammingErrorzraised wrong exception)r5r�rr!)r:r�rrr	r�1s
z)ThreadTests.CheckConRollback.<locals>.run)r:r�)r�r�rr�)r�r�r:r�r�r�r�)rr�r�r�rrr	�CheckConRollback0s
zThreadTests.CheckConRollbackcCsRdd�}g}tj||j|d�d�}|��|��t|�dkrN|�d�|��dS)NcSsFy|��|�d�dStjk
r,dS|�d�YnXdS)Nzdid not raise ProgrammingErrorzraised wrong exception)r0r�rr!)r:r�rrr	r�Cs
z&ThreadTests.CheckConClose.<locals>.run)r:r�)r�r�rr�)r�r�r:r�r�r�r�)rr�r�r�rrr	�
CheckConCloseBs
zThreadTests.CheckConClosecCsRdd�}g}tj||j|d�d�}|��|��t|�dkrN|�d�|��dS)NcSsHy|�d�|�d�dStjk
r.dS|�d�YnXdS)Nz#insert into test(name) values ('a')zdid not raise ProgrammingErrorzraised wrong exception)r-r�rr!)r�r�rrr	r�Us

z.ThreadTests.CheckCurImplicitBegin.<locals>.run)r�r�)r�r�rr�)r�r�r�r�r�r�r�)rr�r�r�rrr	�CheckCurImplicitBeginTs
z!ThreadTests.CheckCurImplicitBegincCsRdd�}g}tj||j|d�d�}|��|��t|�dkrN|�d�|��dS)NcSsFy|��|�d�dStjk
r,dS|�d�YnXdS)Nzdid not raise ProgrammingErrorzraised wrong exception)r0r�rr!)r�r�rrr	r�gs
z&ThreadTests.CheckCurClose.<locals>.run)r�r�)r�r�rr�)r�r�r�r�r�r�r�)rr�r�r�rrr	�
CheckCurClosefs
zThreadTests.CheckCurClosecCs^dd�}g}|j�d�tj||j|d�d�}|��|��t|�dkrZ|�d�|��dS)NcSsHy|�d�|�d�dStjk
r.dS|�d�YnXdS)Nzselect name from testzdid not raise ProgrammingErrorzraised wrong exception)r-r�rr!)r�r�rrr	r�ys

z(ThreadTests.CheckCurExecute.<locals>.runz#insert into test(name) values ('a'))r�r�)r�r�rr�)r�r-r�r�r�r�r�r�)rr�r�r�rrr	�CheckCurExecutexs
zThreadTests.CheckCurExecutecCsjdd�}g}|j�d�|j�d�tj||j|d�d�}|��|��t|�dkrf|�d�|��dS)	NcSsFy|��}|�d�dStjk
r,dS|�d�YnXdS)Nzdid not raise ProgrammingErrorzraised wrong exception)r?r�rr!)r�r�r@rrr	r��s
z)ThreadTests.CheckCurIterNext.<locals>.runz#insert into test(name) values ('a')zselect name from test)r�r�)r�r�rr�)r�r-r�r�r�r�r�r�)rr�r�r�rrr	�CheckCurIterNext�s
zThreadTests.CheckCurIterNextN)
r%r&r'r/r1r�r�r�r�r�r�r�r�rrrr	r�sr�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�ConstructorTestscCst�ddd�}dS)Ni�r��)rZDate)r�drrr	�	CheckDate�szConstructorTests.CheckDatecCst�ddd�}dS)N��'�#)rZTime)rr�rrr	�	CheckTime�szConstructorTests.CheckTimecCst�dddddd�}dS)Ni�r�r�r�r�r�)rZ	Timestamp)r�tsrrr	�CheckTimestamp�szConstructorTests.CheckTimestampcCst�d�}dS)NrX)rZ
DateFromTicks)rr�rrr	�CheckDateFromTicks�sz#ConstructorTests.CheckDateFromTickscCst�d�}dS)NrX)rZ
TimeFromTicks)rr�rrr	�CheckTimeFromTicks�sz#ConstructorTests.CheckTimeFromTickscCst�d�}dS)NrX)rZTimestampFromTicks)rr�rrr	�CheckTimestampFromTicks�sz(ConstructorTests.CheckTimestampFromTickscCst�d�}dS)Ns')rZBinary)r�brrr	�CheckBinary�szConstructorTests.CheckBinaryN)
r%r&r'r�r�r�r�r�r�r�rrrr	r��sr�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�ExtensionTestscCsBt�d�}|��}|�d�|�d�|��d}|�|d�dS)Nz:memory:z�
            -- bla bla
            /* a stupid comment */
            create table a(i);
            insert into a(i) values (5);
            zselect i from arr�)rr*r,�
executescriptr-r?r)rr:r�r�rrr	�CheckScriptStringSql�s

z#ExtensionTests.CheckScriptStringSqlc	Cs8t�d�}|��}|�tj��|�d�WdQRXdS)Nz:memory:z1create table test(x); asdf; create table test2(x))rr*r,r9rr�)rr:r�rrr	�CheckScriptSyntaxError�s
z%ExtensionTests.CheckScriptSyntaxErrorc	Cs8t�d�}|��}|�tj��|�d�WdQRXdS)Nz:memory:z5create table test(sadfsadfdsa); select foo from hurz;)rr*r,r9rr�)rr:r�rrr	�CheckScriptErrorNormal�s
z%ExtensionTests.CheckScriptErrorNormalc	CsHt�d�}|��}|�t��}|�d�WdQRX|�t|j�d�dS)Nz:memory:s9create table test(foo); insert into test(foo) values (5);z script argument must be unicode.)	rr*r,r9rYr�rrMrN)rr:r�rOrrr	�CheckCursorExecutescriptAsBytes�s

z.ExtensionTests.CheckCursorExecutescriptAsBytescCs.t�d�}|�d���d}|�|dd�dS)Nz:memory:zselect 5rr�z Basic test of Connection.execute)rr*r-r?r)rr:�resultrrr	�CheckConnectionExecute�s
z%ExtensionTests.CheckConnectionExecutecCsbt�d�}|�d�|�dddg�|�d���}|�|dddd	�|�|d
ddd	�dS)Nz:memory:zcreate table test(foo)z insert into test(foo) values (?))rI)r�z!select foo from test order by foorrIz$Basic test of Connection.executemanyrr�)rr*r-r|r�r)rr:r�rrr	�CheckConnectionExecutemany�s

z)ExtensionTests.CheckConnectionExecutemanycCs8t�d�}|�d�|�d���d}|�|dd�dS)Nz:memory:z9create table test(foo); insert into test(foo) values (5);zselect foo from testrr�z&Basic test of Connection.executescript)rr*r�r-r?r)rr:r�rrr	�CheckConnectionExecutescript�s

z+ExtensionTests.CheckConnectionExecutescriptN)
r%r&r'r�r�r�r�r�r�r�rrrr	r��s
r�c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�ClosedConTestsc	Cs6t�d�}|��|�tj��|��}WdQRXdS)Nz:memory:)rr*r0r9r!r,)rr:r�rrr	�CheckClosedConCursor�s
z#ClosedConTests.CheckClosedConCursorc	Cs6t�d�}|��|�tj��|��WdQRXdS)Nz:memory:)rr*r0r9r!r2)rr:rrr	�CheckClosedConCommit�s
z#ClosedConTests.CheckClosedConCommitc	Cs6t�d�}|��|�tj��|��WdQRXdS)Nz:memory:)rr*r0r9r!r5)rr:rrr	�CheckClosedConRollback�s
z%ClosedConTests.CheckClosedConRollbackc	Cs@t�d�}|��}|��|�tj��|�d�WdQRXdS)Nz:memory:zselect 4)rr*r,r0r9r!r-)rr:r�rrr	�CheckClosedCurExecute�s

z$ClosedConTests.CheckClosedCurExecutec	CsDt�d�}|��dd�}|�tj��|�dd|�WdQRXdS)Nz:memory:cSsdS)Nrar)rhrrr	r�r�z3ClosedConTests.CheckClosedCreateFunction.<locals>.fr)r)rr*r0r9r!Zcreate_function)rr:r�rrr	�CheckClosedCreateFunctions

z(ClosedConTests.CheckClosedCreateFunctionc	CsJt�d�}|��Gdd�d�}|�tj��|�dd|�WdQRXdS)Nz:memory:c@s$eZdZdd�Zdd�Zdd�ZdS)z6ClosedConTests.CheckClosedCreateAggregate.<locals>.AggcSsdS)Nr)rrrr	r�sz?ClosedConTests.CheckClosedCreateAggregate.<locals>.Agg.__init__cSsdS)Nr)rrhrrr	�stepsz;ClosedConTests.CheckClosedCreateAggregate.<locals>.Agg.stepcSsdS)Nrar)rrrr	�finalizesz?ClosedConTests.CheckClosedCreateAggregate.<locals>.Agg.finalizeN)r%r&r'r�r�r�rrrr	�Agg
sr�r)r)rr*r0r9r!Zcreate_aggregate)rr:r�rrr	�CheckClosedCreateAggregate
s

z)ClosedConTests.CheckClosedCreateAggregatec	Cs@t�d�}|��dd�}|�tj��|�|�WdQRXdS)Nz:memory:cWstjS)N)rZDENY)�argsrrr	�
authorizersz;ClosedConTests.CheckClosedSetAuthorizer.<locals>.authorizer)rr*r0r9r!Zset_authorizer)rr:r�rrr	�CheckClosedSetAuthorizers

z'ClosedConTests.CheckClosedSetAuthorizerc	CsBt�d�}|��dd�}|�tj��|�|d�WdQRXdS)Nz:memory:cSsdS)Nrrrrr	�progress"r�z?ClosedConTests.CheckClosedSetProgressCallback.<locals>.progressr�)rr*r0r9r!Zset_progress_handler)rr:r�rrr	�CheckClosedSetProgressCallbacks

z-ClosedConTests.CheckClosedSetProgressCallbackc	Cs4t�d�}|��|�tj��|�WdQRXdS)Nz:memory:)rr*r0r9r!)rr:rrr	�CheckClosedCall&s
zClosedConTests.CheckClosedCallN)r%r&r'r�r�r�r�r�r�r�r�r�rrrr	r��s
r�c@seZdZdd�ZdS)�ClosedCurTestsc
Cs~t�d�}|��}|��x^dD]V}|dkr2d}n|dkrHdddgf}ng}|�tj��t||�}||�WdQRXq WdS)	Nz:memory:)r-r|r�r�r�r?)r-r�)zselect 4 union select 5r|zinsert into foo(bar) values (?))rI)r�)rr*r,r0r9r!�getattr)rr:r�Zmethod_name�params�methodrrr	�CheckClosed-s


zClosedCurTests.CheckClosedN)r%r&r'r�rrrr	r�,sr�c@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�SqliteOnConflictTestszz
    Tests for SQLite's "insert on conflict" feature.

    See https://www.sqlite.org/lang_conflict.html for details.
    cCs(t�d�|_|j��|_|j�d�dS)Nz:memory:zz
          CREATE TABLE test(
            id INTEGER PRIMARY KEY, name TEXT, unique_name TEXT UNIQUE
          );
        )rr*r+r,r.r-)rrrr	r/FszSqliteOnConflictTests.setUpcCs|j��|j��dS)N)r.r0r+)rrrr	r1Os
zSqliteOnConflictTests.tearDownc	Cs�d|j_|j��|_|j�d�|j�d�|j�d�|�tj��|j�d�WdQRX|j��|j�d�|�	|j�
�g�dS)N�BEGINz,INSERT INTO test(name) VALUES ('abort_test')z8INSERT OR ROLLBACK INTO test(unique_name) VALUES ('foo')z"SELECT name, unique_name from test)r+�isolation_levelr,r.r-r9rrr2rr�)rrrr	�.CheckOnConflictRollbackWithExplicitTransactionSs
zDSqliteOnConflictTests.CheckOnConflictRollbackWithExplicitTransactionc	Cs�d|j_|j��|_|j�d�|j�d�|j�d�|�tj��|j�d�WdQRX|j��|j�d�|�	|j�
�ddg�dS)Nr�z,INSERT INTO test(name) VALUES ('abort_test')z5INSERT OR ABORT INTO test(unique_name) VALUES ('foo')z"SELECT name, unique_name FROM test)�
abort_testN)Nr))r+r�r,r.r-r9rrr2rr�)rrrr	�2CheckOnConflictAbortRaisesWithExplicitTransactionsbs
zHSqliteOnConflictTests.CheckOnConflictAbortRaisesWithExplicitTransactionsc	Cs^|j�d�|j�d�|�tj��|j�d�WdQRX|j�d�|�|j��g�dS)Nz,INSERT INTO test(name) VALUES ('abort_test')z8INSERT OR ROLLBACK INTO test(unique_name) VALUES ('foo')z"SELECT name, unique_name FROM test)r.r-r9rrrr�)rrrr	�)CheckOnConflictRollbackWithoutTransactionrsz?SqliteOnConflictTests.CheckOnConflictRollbackWithoutTransactionc	Csb|j�d�|j�d�|�tj��|j�d�WdQRX|j�d�|�|j��ddg�dS)Nz,INSERT INTO test(name) VALUES ('abort_test')z5INSERT OR ABORT INTO test(unique_name) VALUES ('foo')z"SELECT name, unique_name FROM test)rN)Nr))r.r-r9rrrr�)rrrr	�-CheckOnConflictAbortRaisesWithoutTransactions|szCSqliteOnConflictTests.CheckOnConflictAbortRaisesWithoutTransactionsc	CsF|j�d�|�tj��|j�d�WdQRX|�|j��g�dS)Nz4INSERT OR FAIL INTO test(unique_name) VALUES ('foo'))r.r-r9rrrr�)rrrr	�CheckOnConflictFail�sz)SqliteOnConflictTests.CheckOnConflictFailcCs<|j�d�|j�d�|j�d�|�|j��dg�dS)Nz6INSERT OR IGNORE INTO test(unique_name) VALUES ('foo')zSELECT unique_name FROM test)r))r.r-rr�)rrrr	�CheckOnConflictIgnore�sz+SqliteOnConflictTests.CheckOnConflictIgnorecCs<|j�d�|j�d�|j�d�|�|j��dg�dS)NzFINSERT OR REPLACE INTO test(name, unique_name) VALUES ('Data!', 'foo')zUINSERT OR REPLACE INTO test(name, unique_name) VALUES ('Very different data!', 'foo')z"SELECT name, unique_name FROM test)zVery different data!r))r.r-rr�)rrrr	�CheckOnConflictReplace�sz,SqliteOnConflictTests.CheckOnConflictReplaceN)
r%r&r'�__doc__r/r1rrrrrrrrrrr	r�?s	
r�c	Cs�t�td�}t�td�}t�td�}t�td�}t�td�}t�td�}t�td�}t�t	d�}t�t
d�}t�|||||||||f	�S)NZCheck)rQZ	makeSuiterr(rRr�r�r�r�r�r�Z	TestSuite)	Zmodule_suiteZconnection_suiteZcursor_suiteZthread_suiteZconstructor_suiteZ	ext_suiteZclosed_con_suiteZclosed_cur_suiteZon_conflict_suiterrr	�suite�sr	cCst��}|�t��dS)N)rQZTextTestRunnerr�r	)Zrunnerrrr	r��sr��__main__)r�rQZsqlite3rZtest.supportrrZTestCaserr(rRr�r�r�r�r�r�r	r�r%rrrr	�<module>s&7mA4C]