B ‰ÞN´Ðwã@sìddlZddlZddlZddlmZmZGdd„dejƒZGdd„dejƒZ Gdd„dejƒZ Gd d „d ejƒZ Gd d „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 „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)Ú ModuleTestscCs| tjddtj¡dS)Nz2.0zapilevel is %s, should be 2.0)Ú assertEqualÚsqliteZapilevel)Úself©rú7/opt/alt/python37/lib64/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 „Zd d „Zd d„Z dd„Z dd„Z dd„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 ¡| |jj tj ¡| |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 ÚCheckInTransactions   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..PathcSstS)N)r)rrrr Ú __fspath__¨szDConnectionTests.CheckOpenWithPathLikeObject..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¡tjdddWdQRXdS| 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)rIrIr z&needs sqlite versions older than 3.3.1c Cs<| tj¡}tjdddWdQRX| 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 „Zd d „Zd d„Z dd„Z dd„Z dd„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)Nz select 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 ÚCheckExecuteWrongNoOfArgs3 sz&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..LcSsdS)Nr r)rrrr Ú__len__sz8CursorTests.CheckExecuteParamSequence..L.__len__cSs|dks t‚dS)Nrr))ÚAssertionError)rÚxrrr Ú __getitem__s z.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..DcSsdS)Nr)r)rÚkeyrrr Ú __missing__+szBCursorTests.CheckExecuteDictMapping_Mapping..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|jjdddS)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 ú dsz8CursorTests.CheckExecuteManySequence..édén)r.r|Úrange)rrrr ÚCheckExecuteManySequencecsz$CursorTests.CheckExecuteManySequencecCs"Gdd„dƒ}|j d|ƒ¡dS)Nc@seZdZdd„Zdd„ZdS)z4CursorTests.CheckExecuteManyIterator..MyItercSs d|_dS)Né)Úvalue)rrrr Ú__init__hsz=CursorTests.CheckExecuteManyIterator..MyIter.__init__cSs*|jdkrt‚n|jd7_|jfSdS)Né r )r‡Ú StopIteration)rrrr Ú__next__ks z=CursorTests.CheckExecuteManyIterator..MyIter.__next__N)r%r&r'rˆr‹rrrr ÚMyItergsrŒz#insert into test(income) values (?))r.r|)rrŒrrr ÚCheckExecuteManyIteratorfs z$CursorTests.CheckExecuteManyIteratorcCsdd„}|j d|ƒ¡dS)NcssxtdƒD] }|fVq WdS)Nr†)r„)Úirrr Úmygenusz4CursorTests.CheckExecuteManyGenerator..mygenz#insert into test(income) values (?))r.r|)rrrrr Ú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†r r•)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)Nr rwzdelete 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œ)rrrrr ÚCheckFetchmany°s    zCursorTests.CheckFetchmanycCs.|j d¡|jjdd}| t|ƒd¡dS)z0Checks if fetchmany works with keyword argumentszselect name from testr‚)Úsizer N)r.r-r›rrœ)rrrrr ÚCheckFetchmanyKwArg·s zCursorTests.CheckFetchmanyKwArgcCs@|j d¡|j ¡}| t|ƒd¡|j ¡}| |g¡dS)Nzselect name from testr )r.r-Úfetchallrrœ)rrrrr Ú 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..f)r9r“r+r,)rrªr™rrr ÚCheckWrongCursorCallableÑs z$CursorTests.CheckWrongCursorCallablec Cs8Gdd„dƒ}|ƒ}| t¡t |¡}WdQRXdS)Nc@s eZdZdS)z.CursorTests.CheckCursorWrongClass..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)r r)r N)Ú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.CheckLastRowIDOnIgnorec Cs¼g}x–dD]Ž}d}|jd |¡dn|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)rZresultsr¯r²Zexpectedrrr ÚCheckLastRowIDInsertORðs   z"CursorTests.CheckLastRowIDInsertORN)5r%r&r'r/r1rSrTrUrVrWrZr[r\r]r_r`rbrcrdrerlrnrsrtrurvr<ryr{r}rr…rrr‘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 „Zd d „Zd d„Z dd„Z dd„Z dd„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..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..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..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..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..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..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..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..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 „Zd d „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 „Zd d „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™rrrr Ú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 dd d ¡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.executemanyr r¤)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 „Zd d „Zd d„Z dd„Z dd„Z dS)Ú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..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..AggcSsdS)Nr)rrrr rˆsz?ClosedConTests.CheckClosedCreateAggregate..Agg.__init__cSsdS)Nr)rrhrrr Ústepsz;ClosedConTests.CheckClosedCreateAggregate..Agg.stepcSsdS)Nrar)rrrr Úfinalizesz?ClosedConTests.CheckClosedCreateAggregate..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..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..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™Z method_nameZparamsÚ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„Z dd„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)rÿN)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 ÚCheckOnConflictIgnores   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/r1rþrrrrrrrrrr 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         rcCst ¡}| tƒ¡dS)N)rQZTextTestRunnerr¼r)Zrunnerrrr r´¬sr´Ú__main__)rÀrQZsqlite3rZ test.supportrrZTestCaserr(rRrºrÎrÝrçr÷rûrr´r%rrrr Ús&7mA4C]