asda?‰PNG  IHDR ? f ??C1 sRGB ??é gAMA ±? üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T a bYh@s&ddlZddlZddlZddlZddlZddlmZmZm Z Gdddej Z Gdddej Z Gdddej Z Gd d d ej ZGd d d ej ZGd ddej ZGdddej ZGdddej ZGdddej ZGdddej ZGdddej ZddZddZedkr"edS)N) SHORT_TIMEOUTTESTFNunlinkc@steZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS) ModuleTestscCs|tjddtjdS)Nz2.0zapilevel is %s, should be 2.0) assertEqualsqliteZapilevelselfr ./usr/local/lib/python3.9/sqlite3/test/dbapi.py CheckAPILevel"s zModuleTests.CheckAPILevelcCs|tjddtjdS)Nzthreadsafety is %d, should be 1)rrZ threadsafetyrr r r CheckThreadSafety&s zModuleTests.CheckThreadSafetycCs|tjddtjdS)NZqmarkz%paramstyle is '%s', should be 'qmark')rrZ paramstylerr r r CheckParamStyle*s  zModuleTests.CheckParamStylecCs|ttjtddS)Nz&Warning is not a subclass of Exception) assertTrue issubclassrWarning Exceptionrr r r CheckWarning/szModuleTests.CheckWarningcCs|ttjtddS)Nz$Error is not a subclass of Exception)rrrErrorrrr r r CheckError3szModuleTests.CheckErrorcCs|ttjtjddS)Nz)InterfaceError is not a subclass of Error)rrrInterfaceErrorrrr r r CheckInterfaceError7szModuleTests.CheckInterfaceErrorcCs|ttjtjddS)Nz(DatabaseError is not a subclass of Error)rrr DatabaseErrorrrr r r CheckDatabaseError;szModuleTests.CheckDatabaseErrorcCs|ttjtjddS)Nz,DataError is not a subclass of DatabaseError)rrr DataErrorrrr r r CheckDataError?szModuleTests.CheckDataErrorcCs|ttjtjddS)Nz3OperationalError is not a subclass of DatabaseError)rrrOperationalErrorrrr r r CheckOperationalErrorCsz!ModuleTests.CheckOperationalErrorcCs|ttjtjddS)Nz1IntegrityError is not a subclass of DatabaseError)rrrIntegrityErrorrrr r r CheckIntegrityErrorGszModuleTests.CheckIntegrityErrorcCs|ttjtjddS)Nz0InternalError is not a subclass of DatabaseError)rrr InternalErrorrrr r r CheckInternalErrorKszModuleTests.CheckInternalErrorcCs|ttjtjddS)Nz3ProgrammingError is not a subclass of DatabaseError)rrrProgrammingErrorrrr r r CheckProgrammingErrorOsz!ModuleTests.CheckProgrammingErrorcCs|ttjtjddS)Nz4NotSupportedError is not a subclass of DatabaseError)rrrNotSupportedErrorrrr r r CheckNotSupportedErrorSs  z"ModuleTests.CheckNotSupportedErrorN)__name__ __module__ __qualname__r rrrrrrrrr r"r$r&r r r r r!src@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZeejdkddd Zd!S)"ConnectionTestscCs0td|_|j}|d|dddS)N:memory:z4create table test(id integer primary key, name text)!insert into test(name) values (?)foo)rconnectcxcursorexecuter cur r r setUpZs   zConnectionTests.setUpcCs|jdSNr0closerr r r tearDown`szConnectionTests.tearDowncCs|jdSr6r0commitrr r r CheckCommitcszConnectionTests.CheckCommitcCs|j|jdS)zV A commit should also work when no changes were made to the database. Nr:rr r r CheckCommitAfterNoChangesfs z)ConnectionTests.CheckCommitAfterNoChangescCs|jdSr6r0rollbackrr r r CheckRollbackmszConnectionTests.CheckRollbackcCs|j|jdS)zX A rollback should also work when no changes were made to the database. Nr>rr r r CheckRollbackAfterNoChangesps z+ConnectionTests.CheckRollbackAfterNoChangescCs|j}dSr6r0r1r3r r r CheckCursorwszConnectionTests.CheckCursorcCs>d}|tjt|}Wdn1s00YdS)Nz/foo/bar/bla/23534/mydb.db) assertRaisesrrr/)r ZYOU_CANNOT_OPEN_THISconr r r CheckFailedOpenzszConnectionTests.CheckFailedOpencCs|jdSr6r7rr r r CheckCloseszConnectionTests.CheckClosecCs||jjtj||jjtj||jjtj||jjtj||jjtj||jjtj||jj tj ||jj tj ||jj tj ||jj tj dSr6) rr0rrrrrrrrr!r#r%rr r r CheckExceptionsszConnectionTests.CheckExceptionscCstd}|}||jd|d||jd|dd||jd|ddg|}||jd|||jd|ddg|}||jddS) Nr+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/r1rin_transactionr2fetchoner;)r r0r4rowr r r CheckInTransactions   z"ConnectionTests.CheckInTransactioncCs6|td|j_Wdn1s(0YdS)NT)rDAttributeErrorr0rIrr r r CheckInTransactionROs z$ConnectionTests.CheckInTransactionROcCsX|ttGddd}|}t|}|dWdn1sJ0YdS)z| Checks that we can successfully connect to a database using an object that is PathLike, i.e. has __fspath__(). c@seZdZddZdS)z9ConnectionTests.CheckOpenWithPathLikeObject..PathcSstSr6)rrr r r __fspath__szDConnectionTests.CheckOpenWithPathLikeObject..Path.__fspath__N)r'r(r)rOr r r r PathsrPcreate table test(id integer)N) addCleanuprrrr/r2)r rPpathr0r r r CheckOpenWithPathLikeObjects   z+ConnectionTests.CheckOpenWithPathLikeObjectc Cs8tjdkrH|tjtjdddWdn1s:0YdS|tttt}|dWdn1s~0Ytjdtdd}|dWdn1s0YtjdtdddH}|tj |d Wdn1s 0YWdn1s*0YdS) N)rVr+T)ZurirQzfile:zinsert into test(id) values(0)z?mode=rozinsert into test(id) values(1)) rsqlite_version_inforDr%r/rRrrr2r)r r0r r r CheckOpenUris ,  ((zConnectionTests.CheckOpenUri)rUrUr z&needs sqlite versions older than 3.3.1cCsP|tj}tjdddWdn1s00Y|t|jddS)Nr+F)Zcheck_same_threadz shared connections not available)rDrr%r/rstr exceptionr cmr r r CheckSameThreadErrorOnOldVersions,z0ConnectionTests.CheckSameThreadErrorOnOldVersionN)r'r(r)r5r9r<r=r@rArCrFrGrHrLrNrTrXunittestZskipIfrrWr]r r r r r*Xs$   r*c@seZdZddZddZdS)UninitialisedConnectionTestscCstjtj|_dSr6)r Connection__new__r0rr r r r5sz"UninitialisedConnectionTests.setUpc sfddfddfddfddfddfddf}|D]@}j|d tjd |WdqD1sz0YqDdS) NcsjjSr6)r0isolation_levelr rr r zEUninitialisedConnectionTests.test_uninit_operations..csjjSr6)r0 total_changesr rr r rcrdcsjjSr6)r0rIr rr r rcrdcs jSr6)r0Ziterdumpr rr r rcrdcs jSr6rBr rr r rcrdcs jSr6r7r rr r rcrd)funcz#Base Connection.__init__ not called)subTestZassertRaisesRegexrr#)r Zfuncsrfr rr test_uninit_operationss      z3UninitialisedConnectionTests.test_uninit_operationsN)r'r(r)r5rhr r r r r_sr_c@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?d@Z"dAdBZ#dCdDZ$dEdFZ%dGdHZ&dIdJZ'dKdLZ(dMdNZ)dOdPZ*dQdRZ+dSdTZ,dUdVZ-dWdXZ.dYdZZ/d[d\Z0d]d^Z1d_d`Z2dadbZ3dcddZ4dedfZ5dgS)h CursorTestscCs6td|_|j|_|jd|jdddS)Nr+z\create table test(id integer primary key, name text, income number, unique_test text unique)r,r-rr/r0r1r4r2rr r r r5s   zCursorTests.setUpcCs|j|jdSr6r4r8r0rr r r r9s zCursorTests.tearDowncCs|jddS)Ndelete from testr4r2rr r r CheckExecuteNoArgsszCursorTests.CheckExecuteNoArgscCs<|tj|jdWdn1s.0YdS)Nz select asdf)rDrrr4r2rr r r CheckExecuteIllegalSqlsz"CursorTests.CheckExecuteIllegalSqlcCs<|tj|jdWdn1s.0YdS)Nzselect 5+4; select 4+5)rDrrr4r2rr r r CheckExecuteTooMuchSqlsz"CursorTests.CheckExecuteTooMuchSqlcCs|jddS)Nzselect 5+4; -- foo barrmrr r r CheckExecuteTooMuchSql2sz#CursorTests.CheckExecuteTooMuchSql2cCs|jddS)NzT select 5+4; /* foo */ rmrr r r CheckExecuteTooMuchSql3sz#CursorTests.CheckExecuteTooMuchSql3cCs:|t|jdWdn1s,0YdSN*)rD TypeErrorr4r2rr r r CheckExecuteWrongSqlArgs z#CursorTests.CheckExecuteWrongSqlArgcCs|jdddS)Ninsert into test(id) values (?))rtrmrr r r CheckExecuteArgIntszCursorTests.CheckExecuteArgIntcCs|jdddS)N#insert into test(income) values (?))gq= ף@rmrr r r CheckExecuteArgFloatsz CursorTests.CheckExecuteArgFloatcCs|jdddS)Nr,)ZHugormrr r r CheckExecuteArgString sz!CursorTests.CheckExecuteArgStringcCs@|jdd|jd|jjf|j}||dddS)Nr,)Hugoz select name from test where id=?rr|)r4r2 lastrowidrJrr rKr r r !CheckExecuteArgStringWithZeroByte s z-CursorTests.CheckExecuteArgStringWithZeroBytecCsN|t}|jddWdn1s.0Y|t|jddS)Nrwrtz"parameters are of unsupported type)rD ValueErrorr4r2rrYrZr[r r r CheckExecuteNonIterables ,z#CursorTests.CheckExecuteNonIterablecCs>|tj|jddWdn1s00YdS)Nrw)ZEgonrDrr#r4r2rr r r CheckExecuteWrongNoOfArgs1sz&CursorTests.CheckExecuteWrongNoOfArgs1cCs<|tj|jdWdn1s.0YdSNrwrrr r r CheckExecuteWrongNoOfArgs2sz&CursorTests.CheckExecuteWrongNoOfArgs2cCs<|tj|jdWdn1s.0YdSrrrr r r CheckExecuteWrongNoOfArgs3"sz&CursorTests.CheckExecuteWrongNoOfArgs3cCs:|jd|jddg|j}||dddS)N%insert into test(name) values ('foo')"select name from test where name=?r.rr4r2rJrr~r r r CheckExecuteParamList's  z!CursorTests.CheckExecuteParamListcCsHGddd}|jd|jd||j}||dddS)Nc@seZdZddZddZdS)z0CursorTests.CheckExecuteParamSequence..LcSsdS)Nr r rr r r __len__/sz8CursorTests.CheckExecuteParamSequence..L.__len__cSs|dks JdS)Nrr.r r xr r r __getitem__1s z.L.__getitem__Nr'r(r)rrr r r r L.srrrrr.r)r rrKr r r CheckExecuteParamSequence-s   z%CursorTests.CheckExecuteParamSequencecCsXGddd}|jd|t |jd|Wdn1sJ0YdS)Nc@seZdZddZddZdS)z6CursorTests.CheckExecuteParamSequenceBadLen..LcSs dddS)Nr rr rr r r r=sz>CursorTests.CheckExecuteParamSequenceBadLen..L.__len__cSstdSr6)AssertionError)Zslfrr r r r?szBCursorTests.CheckExecuteParamSequenceBadLen..L.__getitem__Nrr r r r r<srrr)r4r2rDZeroDivisionError)r rr r r CheckExecuteParamSequenceBadLen:s  z+CursorTests.CheckExecuteParamSequenceBadLencCs<|jd|jdddi|j}||dddS)Nr&select name from test where name=:namenamer.rrr~r r r CheckExecuteDictMappingFs  z#CursorTests.CheckExecuteDictMappingcCsJGdddt}|jd|jd||j}||dddS)Nc@seZdZddZdS)z6CursorTests.CheckExecuteDictMapping_Mapping..DcSsdSNr.r )r keyr r r __missing__NszBCursorTests.CheckExecuteDictMapping_Mapping..D.__missing__N)r'r(r)rr r r r DMsrrrrr.)dictr4r2rJr)r rrKr r r CheckExecuteDictMapping_MappingLs   z+CursorTests.CheckExecuteDictMapping_MappingcCsN|jd|tj"|jdddiWdn1s@0YdS)Nrz1select name from test where name=:name and id=:idrr.r4r2rDrr#rr r r $CheckExecuteDictMappingTooLittleArgsVs z0CursorTests.CheckExecuteDictMappingTooLittleArgscCsH|jd|tj|jdWdn1s:0YdS)Nrrrrr r r CheckExecuteDictMappingNoArgs[s z)CursorTests.CheckExecuteDictMappingNoArgscCsN|jd|tj"|jdddiWdn1s@0YdS)Nrrrr.rrr r r CheckExecuteDictMappingUnnamed`s z*CursorTests.CheckExecuteDictMappingUnnamedcCs|jdSr6)r4r8rr r r rGeszCursorTests.CheckClosecCsD|jd|jd|jd|jd||jjddS)Nrlrzupdate test set name='bar'r4r2rrowcountrr r r CheckRowcountExecutehs     z CursorTests.CheckRowcountExecutecCs |jd||jjddS)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 6Nrrr r r CheckRowcountSelectos zCursorTests.CheckRowcountSelectcCs2|jd|jdgd||jjddS)Nrlr,))r )rrUrU)r4r2 executemanyrrrr r r CheckRowcountExecutemanyxs z$CursorTests.CheckRowcountExecutemanycCs0|jd|jd|jd|jjdddS)Nrrz"total changes reported wrong value)msg)r4r2Z assertLessr0rerr r r CheckTotalChanges}s  zCursorTests.CheckTotalChangescCs"|jdddtddDdS)NrycSsg|] }|fqSr r ).0rr r r rdz8CursorTests.CheckExecuteManySequence..dn)r4rrangerr r r CheckExecuteManySequencesz$CursorTests.CheckExecuteManySequencecCs"Gddd}|jd|dS)Nc@s$eZdZddZddZddZdS)z4CursorTests.CheckExecuteManyIterator..MyItercSs d|_dSN)valuerr r r __init__sz=CursorTests.CheckExecuteManyIterator..MyIter.__init__cSs|Sr6r rr r r __iter__sz=CursorTests.CheckExecuteManyIterator..MyIter.__iter__cSs*|jdkrtn|jd7_|jfSdS)N r )r StopIterationrr r r __next__s z=CursorTests.CheckExecuteManyIterator..MyIter.__next__N)r'r(r)rrrr r r r MyItersrryr4r)r rr r r CheckExecuteManyIteratorsz$CursorTests.CheckExecuteManyIteratorcCsdd}|jd|dS)NcsstdD] }|fVqdSr)r)ir r r mygens z4CursorTests.CheckExecuteManyGenerator..mygenryr)r rr r r CheckExecuteManyGeneratorsz%CursorTests.CheckExecuteManyGeneratorcCs>|t |jddgWdn1s00YdS)NrtrrDrur4rrr r r CheckExecuteManyWrongSqlArgs z'CursorTests.CheckExecuteManyWrongSqlArgcCs@|tj |jddgWdn1s20YdS)Nzselect ?r)rDrr#r4rrr r r CheckExecuteManySelectsz"CursorTests.CheckExecuteManySelectcCs<|t|jddWdn1s.0YdS)Nryrtrrr r r CheckExecuteManyNotIterables z'CursorTests.CheckExecuteManyNotIterablecCsv|jd|jdd|jdd|jdg}|jD]}||dq>||dd||dd dS) Nrlrw)r)zselect id from test order by idrrr r)r4r2appendr)r ZlstrKr r r CheckFetchIters   zCursorTests.CheckFetchItercCs@|jd|j}||dd|j}||ddS)Nselect name from testrr.rr~r r r CheckFetchones    zCursorTests.CheckFetchonecCs"|j}|}||ddSr6)r0r1rJr)r currKr r r CheckFetchoneNoStatements z$CursorTests.CheckFetchoneNoStatementcCsr||jjdd|j_|jd|jd|jd|jd|jd|j}|t|ddS)Nr rrlz#insert into test(name) values ('A')z#insert into test(name) values ('B')z#insert into test(name) values ('C')r)rr4Z arraysizer2 fetchmanylenr resr r r CheckArraySizes      zCursorTests.CheckArraySizecCsD|jd|jd}|t|d|jd}||gdS)Nrrr r4r2rrrrr r r CheckFetchmanys    zCursorTests.CheckFetchmanycCs.|jd|jjdd}|t|ddS)z0Checks if fetchmany works with keyword argumentsrr)sizer Nrrr r r CheckFetchmanyKwArgs zCursorTests.CheckFetchmanyKwArgcCs@|jd|j}|t|d|j}||gdS)Nrr )r4r2fetchallrrrr r r CheckFetchalls    zCursorTests.CheckFetchallcCs|jgddS)N)rUr)r4Z setinputsizesrr r r CheckSetinputsizesszCursorTests.CheckSetinputsizescCs|jdddS)Nrrr4Z setoutputsizerr r r CheckSetoutputsizeszCursorTests.CheckSetoutputsizecCs|jddSrsrrr r r CheckSetoutputsizeNoColumnsz&CursorTests.CheckSetoutputsizeNoColumncCs||jj|jdSr6)rr4 connectionr0rr r r CheckCursorConnectionsz!CursorTests.CheckCursorConnectioncCsB|t$dd}|j|}Wdn1s40YdS)NcSsdSr6r r r r r frdz/CursorTests.CheckWrongCursorCallable..f)rDrur0r1)r rrr r r CheckWrongCursorCallables z$CursorTests.CheckWrongCursorCallablecCsLGddd}|}|tt|}Wdn1s>0YdS)Nc@s eZdZdS)z.CursorTests.CheckCursorWrongClass..FooN)r'r(r)r r r r Foordr)rDrurZCursor)r rr.rr r r CheckCursorWrongClasss z!CursorTests.CheckCursorWrongClassc Csbd}dD]T}|j|d4|j||d||jjdWdq1sR0YqdS)zV INSERT OR REPLACE and REPLACE INTO should produce the same behavior. z+{} INTO test(id, unique_test) VALUES (?, ?))zINSERT OR REPLACEZREPLACE statement)r r.r N)rgr4r2formatrr})r sqlrr r r CheckLastRowIDOnReplaces z#CursorTests.CheckLastRowIDOnReplacecCs@|jdd||jjd|jdd||jjddS)Nz2insert or ignore into test(unique_test) values (?))testr)r4r2rr}rr r r CheckLastRowIDOnIgnore sz"CursorTests.CheckLastRowIDOnIgnorec Csg}dD]}d}|jd|d|j|||f|||jjf|tj&|j|||fWdn1s0Y|||jjfWdq1s0Yqgd}| ||dS)N)FAILABORTROLLBACKz.INSERT OR {} INTO test(unique_test) VALUES (?)z INSERT OR {}r)rrrrrUrrrr) rgrr4r2rr}rDrrr)r resultsrrZexpectedr r r CheckLastRowIDInsertORs42z"CursorTests.CheckLastRowIDInsertORN)6r'r(r)r5r9rnrorprqrrrvrxrzr{rrrrrrrrrrrrrrGrrrrrrrrrrrrrrrrrrrrrrrrrrr r r r risf          ric@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS) ThreadTestscCs(td|_|j|_|jddS)Nr+z\create table test(id integer primary key, name text, bin binary, ratio number, ts timestamp))rr/rEr1rr2rr r r r5)s  zThreadTests.setUpcCs|j|jdSr6)rr8rErr r r r9.s zThreadTests.tearDowncCsRdd}g}tj||j|dd}||t|dkrN|d|dS)NcSsHz|}|dWdStjy.YdS|dYn0dSNdid not raise ProgrammingErrorraised wrong exception)r1rrr#)rEerrorsrr r r run3s z'ThreadTests.CheckConCursor..runrErtargetkwargsr  threadingThreadrEstartjoinrfailr rrtr r r CheckConCursor2s  zThreadTests.CheckConCursorcCsRdd}g}tj||j|dd}||t|dkrN|d|dS)NcSsHz||dWdStjy.YdS|dYn0dSr)r;rrr#rr r r rEs z'ThreadTests.CheckConCommit..runrrrrrrr r r CheckConCommitDs  zThreadTests.CheckConCommitcCsRdd}g}tj||j|dd}||t|dkrN|d|dS)NcSsHz||dWdStjy.YdS|dYn0dSr)r?rrr#rr r r rWs z)ThreadTests.CheckConRollback..runrrrrrrr r r CheckConRollbackVs  zThreadTests.CheckConRollbackcCsRdd}g}tj||j|dd}||t|dkrN|d|dS)NcSsHz||dWdStjy.YdS|dYn0dSrr8rrr#rr r r ris z&ThreadTests.CheckConClose..runrrrrrrr r r CheckConClosehs  zThreadTests.CheckConClosecCsRdd}g}tj||j|dd}||t|dkrN|d|dS)NcSsJz|d|dWdStjy0YdS|dYn0dS)N#insert into test(name) values ('a')rrr2rrr#rrr r r r{s  z.ThreadTests.CheckCurImplicitBegin..runr rrrrrrrrrrrr r r CheckCurImplicitBeginzs  z!ThreadTests.CheckCurImplicitBegincCsRdd}g}tj||j|dd}||t|dkrN|d|dS)NcSsHz||dWdStjy.YdS|dYn0dSrrr r r r rs z&ThreadTests.CheckCurClose..runr rrrr rr r r CheckCurCloses  zThreadTests.CheckCurClosecCs^dd}g}|jdtj||j|dd}||t|dkrZ|d|dS)NcSsJz|d|dWdStjy0YdS|dYn0dS)Nrrrr r r r r rs  z(ThreadTests.CheckCurExecute..runr r rrrrr2rrrrrrrr r r CheckCurExecutes   zThreadTests.CheckCurExecutecCsjdd}g}|jd|jdtj||j|dd}||t|dkrf|d|dS) NcSsHz|}|dWdStjy.YdS|dYn0dSr)rJrrr#)rrrKr r r rs z)ThreadTests.CheckCurIterNext..runr rr rrrrrr r r CheckCurIterNexts    zThreadTests.CheckCurIterNextN) r'r(r)r5r9rrrr rrrrr r r r r(src@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)ConstructorTestscCstddd}dS)Nr)rZDater dr r r CheckDateszConstructorTests.CheckDatecCstddd}dS)N '#)rZTimer rr r r CheckTimeszConstructorTests.CheckTimecCstdddddd}dS)Nrrrrrr)rZ Timestampr tsr r r CheckTimestampszConstructorTests.CheckTimestampcCstd}dSrs)rZ DateFromTicksrr r r CheckDateFromTickssz#ConstructorTests.CheckDateFromTickscCstd}dSrs)rZ TimeFromTicksrr r r CheckTimeFromTickssz#ConstructorTests.CheckTimeFromTickscCstd}dSrs)rZTimestampFromTicksrr r r CheckTimestampFromTickssz(ConstructorTests.CheckTimestampFromTickscCstd}dS)Ns')rZBinary)r br r r CheckBinaryszConstructorTests.CheckBinaryN) r'r(r)rrr r!r"r#r%r r r r rsrc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)ExtensionTestscCsBtd}|}|d|d|d}||ddS)Nr+z -- bla bla /* a stupid comment */ create table a(i); insert into a(i) values (5); zselect i from arr)rr/r1 executescriptr2rJr)r rErrr r r CheckScriptStringSqls     z#ExtensionTests.CheckScriptStringSqlcCsLtd}|}|tj|dWdn1s>0YdS)Nr+z1create table test(x); asdf; create table test2(x)rr/r1rDrr'r rErr r r CheckScriptSyntaxErrors z%ExtensionTests.CheckScriptSyntaxErrorcCsLtd}|}|tj|dWdn1s>0YdS)Nr+z5create table test(sadfsadfdsa); select foo from hurz;r)r*r r r CheckScriptErrorNormals z%ExtensionTests.CheckScriptErrorNormalcCs\td}|}|t}|dWdn1s<0Y|t|jddS)Nr+s9create table test(foo); insert into test(foo) values (5);z script argument must be unicode.) rr/r1rDrr'rrYrZ)r rErr\r r r CheckCursorExecutescriptAsBytess   (z.ExtensionTests.CheckCursorExecutescriptAsBytescCs.td}|dd}||dddS)Nr+zselect 5rrz Basic test of Connection.execute)rr/r2rJrr rEresultr r r CheckConnectionExecutes z%ExtensionTests.CheckConnectionExecutecCsbtd}|d|dddg|d}||dddd ||d dd d dS) Nr+zcreate table test(foo)z insert into test(foo) values (?)rrz!select foo from test order by foorrUz$Basic test of Connection.executemanyr r)rr/r2rrrr.r r r CheckConnectionExecutemanys   z)ExtensionTests.CheckConnectionExecutemanycCs8td}|d|dd}||dddS)Nr+z9create table test(foo); insert into test(foo) values (5);zselect foo from testrrz&Basic test of Connection.executescript)rr/r'r2rJrr.r r r CheckConnectionExecutescript s  z+ExtensionTests.CheckConnectionExecutescriptN) r'r(r)r(r+r,r-r0r2r3r r r r r&s r&c@sTeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)ClosedConTestscCsJtd}||tj|}Wdn1s<0YdSNr+)rr/r8rDr#r1r*r r r CheckClosedConCursors z#ClosedConTests.CheckClosedConCursorcCsJtd}||tj|Wdn1s<0YdSr5)rr/r8rDr#r;r rEr r r CheckClosedConCommits z#ClosedConTests.CheckClosedConCommitcCsJtd}||tj|Wdn1s<0YdSr5)rr/r8rDr#r?r7r r r CheckClosedConRollbacks z%ClosedConTests.CheckClosedConRollbackcCsTtd}|}||tj|dWdn1sF0YdS)Nr+zselect 4)rr/r1r8rDr#r2r*r r r CheckClosedCurExecute"s  z$ClosedConTests.CheckClosedCurExecutecCsXtd}|dd}|tj|dd|Wdn1sJ0YdS)Nr+cSsdSNrr )rr r r r,rdz3ClosedConTests.CheckClosedCreateFunction..fr.r )rr/r8rDr#Zcreate_function)r rErr r r CheckClosedCreateFunction)s  z(ClosedConTests.CheckClosedCreateFunctioncCs^td}|Gddd}|tj|dd|Wdn1sP0YdS)Nr+c@s$eZdZddZddZddZdS)z6ClosedConTests.CheckClosedCreateAggregate..AggcSsdSr6r rr r r r4sz?ClosedConTests.CheckClosedCreateAggregate..Agg.__init__cSsdSr6r rr r r step6sz;ClosedConTests.CheckClosedCreateAggregate..Agg.stepcSsdSr;r rr r r finalize8sz?ClosedConTests.CheckClosedCreateAggregate..Agg.finalizeN)r'r(r)rr=r>r r r r Agg3sr?r.r )rr/r8rDr#Zcreate_aggregate)r rEr?r r r CheckClosedCreateAggregate0s  z)ClosedConTests.CheckClosedCreateAggregatecCsTtd}|dd}|tj||Wdn1sF0YdS)Nr+cWstjSr6)rZDENY)argsr r r authorizer@sz;ClosedConTests.CheckClosedSetAuthorizer..authorizer)rr/r8rDr#Zset_authorizer)r rErBr r r CheckClosedSetAuthorizer=s  z'ClosedConTests.CheckClosedSetAuthorizercCsVtd}|dd}|tj||dWdn1sH0YdS)Nr+cSsdSr6r r r r r progressHrdz?ClosedConTests.CheckClosedSetProgressCallback..progressr)rr/r8rDr#Zset_progress_handler)r rErDr r r CheckClosedSetProgressCallbackEs  z-ClosedConTests.CheckClosedSetProgressCallbackcCsHtd}||tj|Wdn1s:0YdSr5)rr/r8rDr#r7r r r CheckClosedCallLs zClosedConTests.CheckClosedCallN) r'r(r)r6r8r9r:r<r@rCrErFr r r r r4s r4c@seZdZddZdS)ClosedCurTestsc Cstd}|}|dD]j}|dvr0d}n|dkrFdddgf}ng}|tj"t||}||Wdq1s~0YqdS) Nr+)r2rr'rrrJ)r2r')zselect 4 union select 5rzinsert into foo(bar) values (?)rr1)rr/r1r8rDr#getattr)r rErZ method_nameparamsmethodr r r CheckClosedSs  zClosedCurTests.CheckClosedN)r'r(r)rKr r r r rGRsrGc@sXeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ dS)SqliteOnConflictTestszz Tests for SQLite's "insert on conflict" feature. See https://www.sqlite.org/lang_conflict.html for details. cCs(td|_|j|_|jddS)Nr+zz CREATE TABLE test( id INTEGER PRIMARY KEY, name TEXT, unique_name TEXT UNIQUE ); rjrr r r r5ls  zSqliteOnConflictTests.setUpcCs|j|jdSr6rkrr r r r9us zSqliteOnConflictTests.tearDowncCsd|j_|j|_|jd|jd|jd|tj|jdWdn1sf0Y|j|jd| |j gdS)NBEGIN,INSERT INTO test(name) VALUES ('abort_test')8INSERT OR ROLLBACK INTO test(unique_name) VALUES ('foo')z"SELECT name, unique_name from test r0rbr1r4r2rDrrr;rrrr r r .CheckOnConflictRollbackWithExplicitTransactionys    *  zDSqliteOnConflictTests.CheckOnConflictRollbackWithExplicitTransactioncCsd|j_|j|_|jd|jd|jd|tj|jdWdn1sf0Y|j|jd| |j ddgdS)NrMrN5INSERT OR ABORT INTO test(unique_name) VALUES ('foo')"SELECT name, unique_name FROM testZ abort_testNrrPrr r r 2CheckOnConflictAbortRaisesWithExplicitTransactionss    *  zHSqliteOnConflictTests.CheckOnConflictAbortRaisesWithExplicitTransactionscCsr|jd|jd|tj|jdWdn1sF0Y|jd||jgdS)NrNrOrSr4r2rDrrrrrr r r )CheckOnConflictRollbackWithoutTransactions   * z?SqliteOnConflictTests.CheckOnConflictRollbackWithoutTransactioncCsv|jd|jd|tj|jdWdn1sF0Y|jd||jddgdS)NrNrRrSrTrrVrr r r -CheckOnConflictAbortRaisesWithoutTransactionss   * zCSqliteOnConflictTests.CheckOnConflictAbortRaisesWithoutTransactionscCsZ|jd|tj|jdWdn1s:0Y||jgdS)Nz4INSERT OR FAIL INTO test(unique_name) VALUES ('foo')rVrr r r CheckOnConflictFails *z)SqliteOnConflictTests.CheckOnConflictFailcCs<|jd|jd|jd||jdgdS)Nz6INSERT OR IGNORE INTO test(unique_name) VALUES ('foo')zSELECT unique_name FROM testr-r4r2rrrr r r CheckOnConflictIgnores   z+SqliteOnConflictTests.CheckOnConflictIgnorecCs<|jd|jd|jd||jdgdS)NzFINSERT OR REPLACE INTO test(name, unique_name) VALUES ('Data!', 'foo')zUINSERT OR REPLACE INTO test(name, unique_name) VALUES ('Very different data!', 'foo')rS)zVery different data!r.rZrr r r CheckOnConflictReplaces   z,SqliteOnConflictTests.CheckOnConflictReplaceN) r'r(r)__doc__r5r9rQrUrWrXrYr[r\r r r r rLes   rLc@s$eZdZedZddZddZdS)MultiprocessTestsg@@cCs ttdSr6)rrrr r r r9szMultiprocessTests.tearDownc CsNdtd|jd}tjtjd|gddtjtjd}||j| d|j t jt|jd }zz2||d Wdn1s0YWn6t jy}z|jt|WYd}~nd}~00|jd W|n |0||jz|jd td Wn(tjy:||Yn0| |jddS)Nzif 1: import sqlite3 def wait(): print("started") assert "database is locked" in input() cx = sqlite3.connect("z ", timeout=a) cx.create_function("wait", 0, wait) with cx: cx.execute("create table t(t)") try: # execute two transactions; both will try to lock the db cx.executescript(''' -- start a transaction and wait for parent begin transaction; select * from t; select wait(); rollback; -- start a new transaction; would fail if parent holds lock begin transaction; select * from t; rollback; ''') finally: cx.close() z-czutf-8r)encodingbufsizestdinstdoutstarted)timeoutzinsert into t values('test')zno errorend)inputrd)rCONNECTION_TIMEOUT subprocessPopensys executablePIPErR communicaterrbreadlinestriprr/r2rrawriterYr8Z assertIsNone returncoderTimeoutExpiredkill)r ZSCRIPTprocr0excr r r &test_ctx_mgr_rollback_if_commit_faileds<  ,& z8MultiprocessTests.test_ctx_mgr_rollback_if_commit_failedN)r'r(r)rrgr9rvr r r r r^sr^c Csttd}ttd}ttd}ttd}ttd}ttd}ttd}tt d}tt d}tt } tt } t |||||||||| | f S)NZCheck)r^Z makeSuiterr*rirrr&r4rGrLr_r^Z TestSuite) Z module_suiteZconnection_suiteZ cursor_suiteZ thread_suiteZconstructor_suiteZ ext_suiteZclosed_con_suiteZclosed_cur_suiteZon_conflict_suiteZuninit_con_suiteZmultiproc_con_suiter r r suite s            rwcCst}|tdSr6)r^ZTextTestRunnerrrw)Zrunnerr r r rsr__main__)rhrr^Zsqlite3rrjZ test.supportrrrZTestCaserr*r_rirrr&r4rGrLr^rwrr'r r r r s.7nP4C]G