a XC?hþ˜ã@s&ddlZddlZddlZddlZddlZddlmZmZm Z Gdd„dej ƒZ Gdd„dej ƒZ Gdd„dej ƒZ Gd d „d ej ƒZGd d „d ej ƒZGd d„dej ƒZGdd„dej ƒZGdd„dej ƒZGdd„dej ƒZGdd„dej ƒZGdd„dej ƒZdd„Zdd„Zedkr"eƒdS)éN)Ú SHORT_TIMEOUTÚ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/python39/lib64/python3.9/sqlite3/test/dbapi.pyÚ CheckAPILevel"s ÿzModuleTests.CheckAPILevelcCs| tjddtj¡dS)Nézthreadsafety is %d, should be 1)rrZ threadsafetyrr r r ÚCheckThreadSafety&s ÿzModuleTests.CheckThreadSafetycCs| tjddtj¡dS)NZqmarkz%paramstyle is '%s', should be 'qmark')rrZ paramstylerr r r ÚCheckParamStyle*s  ÿÿzModuleTests.CheckParamStylecCs| ttjtƒd¡dS)Nz&Warning is not a subclass of Exception)Ú assertTrueÚ issubclassrÚWarningÚ Exceptionrr r r Ú CheckWarning/sÿzModuleTests.CheckWarningcCs| ttjtƒd¡dS)Nz$Error is not a subclass of Exception)rrrÚErrorrrr r r Ú CheckError3sÿzModuleTests.CheckErrorcCs| ttjtjƒd¡dS)Nz)InterfaceError is not a subclass of Error)rrrÚInterfaceErrorrrr r r ÚCheckInterfaceError7sÿzModuleTests.CheckInterfaceErrorcCs| ttjtjƒd¡dS)Nz(DatabaseError is not a subclass of Error)rrrÚ DatabaseErrorrrr r r ÚCheckDatabaseError;sÿzModuleTests.CheckDatabaseErrorcCs| ttjtjƒd¡dS)Nz,DataError is not a subclass of DatabaseError)rrrÚ DataErrorrrr r r ÚCheckDataError?sÿzModuleTests.CheckDataErrorcCs| ttjtjƒd¡dS)Nz3OperationalError is not a subclass of DatabaseError)rrrÚOperationalErrorrrr r r ÚCheckOperationalErrorCsÿz!ModuleTests.CheckOperationalErrorcCs| ttjtjƒd¡dS)Nz1IntegrityError is not a subclass of DatabaseError)rrrÚIntegrityErrorrrr r r ÚCheckIntegrityErrorGsÿzModuleTests.CheckIntegrityErrorcCs| ttjtjƒd¡dS)Nz0InternalError is not a subclass of DatabaseError)rrrÚ InternalErrorrrr r r ÚCheckInternalErrorKsÿzModuleTests.CheckInternalErrorcCs| ttjtjƒd¡dS)Nz3ProgrammingError is not a subclass of DatabaseError)rrrÚProgrammingErrorrrr r r ÚCheckProgrammingErrorOsÿz!ModuleTests.CheckProgrammingErrorcCs| ttjtjƒd¡dS)Nz4NotSupportedError is not a subclass of DatabaseError)rrrÚNotSupportedErrorrrr r r ÚCheckNotSupportedErrorSs  ÿþz"ModuleTests.CheckNotSupportedErrorN)Ú__name__Ú __module__Ú __qualname__r rrrrrrrrr r"r$r&r r r r r!src@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)Nú:memory:z4create table test(id integer primary key, name text)ú!insert into test(name) values (?)©Úfoo)rÚconnectÚcxÚcursorÚexecute©r Úcur r r ÚsetUpZs   zConnectionTests.setUpcCs|j ¡dS©N©r0Úcloserr r r ÚtearDown`szConnectionTests.tearDowncCs|j ¡dSr6©r0Úcommitrr r r Ú CheckCommitcszConnectionTests.CheckCommitcCs|j ¡|j ¡dS)zV A commit should also work when no changes were made to the database. Nr:rr r r ÚCheckCommitAfterNoChangesfs z)ConnectionTests.CheckCommitAfterNoChangescCs|j ¡dSr6©r0Úrollbackrr r r Ú CheckRollbackmszConnectionTests.CheckRollbackcCs|j ¡|j ¡dS)zX A rollback should also work when no changes were made to the database. Nr>rr r r ÚCheckRollbackAfterNoChangesps z+ConnectionTests.CheckRollbackAfterNoChangescCs|j ¡}dSr6©r0r1r3r r r Ú CheckCursorwszConnectionTests.CheckCursorcCs>d}| tj¡t |¡}Wdƒn1s00YdS)Nz/foo/bar/bla/23534/mydb.db)Ú assertRaisesrrr/)r ZYOU_CANNOT_OPEN_THISÚconr r r ÚCheckFailedOpenzszConnectionTests.CheckFailedOpencCs|j ¡dSr6r7rr 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 ÚCheckExceptions‚szConnectionTests.CheckExceptionscCs´t d¡}| ¡}| |jd¡| d¡| |jd¡| dd¡| |jd¡| ddg¡| ¡}| |jd¡| ¡| |jd¡| ddg¡| ¡}| |jd¡dS) 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/r1rÚin_transactionr2Úfetchoner;)r r0r4Úrowr r r ÚCheckInTransactions   z"ConnectionTests.CheckInTransactioncCs6| t¡d|j_Wdƒn1s(0YdS)NT)rDÚAttributeErrorr0rIrr r r ÚCheckInTransactionRO¡s z$ConnectionTests.CheckInTransactionROcCsX| tt¡Gdd„dƒ}|ƒ}t |¡}| d¡Wdƒn1sJ0YdS)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..PathcSstSr6)rrr r r Ú __fspath__ªszDConnectionTests.CheckOpenWithPathLikeObject..Path.__fspath__N)r'r(r)rOr r r r ÚPath©srPúcreate table test(id integer)N)Ú addCleanuprrrr/r2)r rPÚpathr0r r r ÚCheckOpenWithPathLikeObject¥s   z+ConnectionTests.CheckOpenWithPathLikeObjectc Cs8tjdkrH| tj¡tjdddWdƒn1s:0YdS| tt¡t t¡}| d¡Wdƒn1s~0Ytjdtdd}| d¡Wdƒn1sº0YtjdtdddH}| tj ¡| d ¡Wdƒn1s 0YWdƒn1s*0YdS) N)éérVr+T)ZurirQzfile:zinsert into test(id) values(0)z?mode=rozinsert into test(id) values(1)) rÚsqlite_version_inforDr%r/rRrrr2r)r r0r r r Ú CheckOpenUri°s ,  ((zConnectionTests.CheckOpenUri)rUrUr z&needs sqlite versions older than 3.3.1cCsP| tj¡}tjdddWdƒn1s00Y| t|jƒd¡dS)Nr+F)Zcheck_same_threadz shared connections not available)rDrr%r/rÚstrÚ exception©r Úcmr r r Ú CheckSameThreadErrorOnOldVersion¾s,z0ConnectionTests.CheckSameThreadErrorOnOldVersionN)r'r(r)r5r9r<r=r@rArCrFrGrHrLrNrTrXÚunittestZskipIfrrWr]r r r r r*Xs$   ÿr*c@seZdZdd„Zdd„ZdS)ÚUninitialisedConnectionTestscCstj tj¡|_dSr6)rZ ConnectionÚ__new__r0rr r r r5Çsz"UninitialisedConnectionTests.setUpc sЇfdd„‡fdd„‡fdd„‡fdd„‡fdd„‡fdd„f}|D]@}ˆj|d ˆ tjd |¡WdƒqD1sz0YqDdS) NcsˆjjSr6)r0Úisolation_levelr rr r ÚÌózEUninitialisedConnectionTests.test_uninit_operations..csˆjjSr6)r0Ú total_changesr rr r rbÍrccsˆjjSr6)r0rIr rr r rbÎrccs ˆj ¡Sr6)r0Ziterdumpr rr r rbÏrccs ˆj ¡Sr6rBr rr r rbÐrccs ˆj ¡Sr6r7r rr r rbÑrc)Úfuncz#Base Connection.__init__ not called)ÚsubTestZassertRaisesRegexrr#)r Zfuncsrer rr Útest_uninit_operationsÊs      úþz3UninitialisedConnectionTests.test_uninit_operationsN)r'r(r)r5rgr r r r r_Æsr_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„Z4dedf„Z5dgS)hÚ CursorTestscCs6t d¡|_|j ¡|_|j d¡|j dd¡dS)Nr+z\create table test(id integer primary key, name text, income number, unique_test text unique)r,r-©rr/r0r1r4r2rr r r r5Ûs   ÿzCursorTests.setUpcCs|j ¡|j ¡dSr6©r4r8r0rr r r r9äs zCursorTests.tearDowncCs|j d¡dS)Núdelete from test©r4r2rr r r ÚCheckExecuteNoArgsèszCursorTests.CheckExecuteNoArgscCs<| tj¡|j d¡Wdƒn1s.0YdS)Nz select asdf)rDrrr4r2rr r r ÚCheckExecuteIllegalSqlësz"CursorTests.CheckExecuteIllegalSqlcCs<| tj¡|j d¡Wdƒn1s.0YdS)Nzselect 5+4; select 4+5)rDrrr4r2rr r r ÚCheckExecuteTooMuchSqlïsz"CursorTests.CheckExecuteTooMuchSqlcCs|j d¡dS)Nzselect 5+4; -- foo barrlrr r r ÚCheckExecuteTooMuchSql2ósz#CursorTests.CheckExecuteTooMuchSql2cCs|j d¡dS)NzT select 5+4; /* foo */ rlrr r r ÚCheckExecuteTooMuchSql3ösz#CursorTests.CheckExecuteTooMuchSql3cCs:| t¡|j d¡Wdƒn1s,0YdS©Né*)rDÚ TypeErrorr4r2rr r r ÚCheckExecuteWrongSqlArgÿs z#CursorTests.CheckExecuteWrongSqlArgcCs|j dd¡dS)Núinsert into test(id) values (?))rsrlrr r r ÚCheckExecuteArgIntszCursorTests.CheckExecuteArgIntcCs|j dd¡dS)Nú#insert into test(income) values (?))gq= ×£ˆ£@rlrr r r ÚCheckExecuteArgFloatsz CursorTests.CheckExecuteArgFloatcCs|j dd¡dS)Nr,)ZHugorlrr r r ÚCheckExecuteArgString sz!CursorTests.CheckExecuteArgStringcCs@|j dd¡|j d|jjf¡|j ¡}| |dd¡dS)Nr,)úHugoz select name from test where id=?rr{)r4r2Ú lastrowidrJr©r rKr r r Ú!CheckExecuteArgStringWithZeroByte s z-CursorTests.CheckExecuteArgStringWithZeroBytecCsN| t¡}|j dd¡Wdƒn1s.0Y| t|jƒd¡dS)Nrvrsz"parameters are of unsupported type)rDÚ ValueErrorr4r2rrYrZr[r r r ÚCheckExecuteNonIterables ,z#CursorTests.CheckExecuteNonIterablecCs>| tj¡|j dd¡Wdƒn1s00YdS)Nrv)éZEgon©rDrr#r4r2rr r r ÚCheckExecuteWrongNoOfArgs1sz&CursorTests.CheckExecuteWrongNoOfArgs1cCs<| tj¡|j d¡Wdƒn1s.0YdS©Nrvr‚rr r r ÚCheckExecuteWrongNoOfArgs2sz&CursorTests.CheckExecuteWrongNoOfArgs2cCs<| tj¡|j d¡Wdƒn1s.0YdSr„r‚rr r r ÚCheckExecuteWrongNoOfArgs3"sz&CursorTests.CheckExecuteWrongNoOfArgs3cCs:|j d¡|j ddg¡|j ¡}| |dd¡dS)Nú%insert into test(name) values ('foo')ú"select name from test where name=?r.r©r4r2rJrr}r r r ÚCheckExecuteParamList's  z!CursorTests.CheckExecuteParamListcCsHGdd„dƒ}|j d¡|j d|ƒ¡|j ¡}| |dd¡dS)Nc@seZdZdd„Zdd„ZdS)z0CursorTests.CheckExecuteParamSequence..LcSsdS)Nr r rr r r Ú__len__/sz8CursorTests.CheckExecuteParamSequence..L.__len__cSs|dks J‚dS)Nrr.r ©r Úxr r r Ú __getitem__1s z.L.__getitem__N©r'r(r)r‹rŽr r r r ÚL.srr‡rˆrr.r‰)r rrKr r r ÚCheckExecuteParamSequence-s   z%CursorTests.CheckExecuteParamSequencecCsXGdd„dƒ}|j d¡| t¡ |j d|ƒ¡Wdƒn1sJ0YdS)Nc@seZdZdd„Zdd„ZdS)z6CursorTests.CheckExecuteParamSequenceBadLen..LcSs dddS)Nr rr rr r r r‹=sz>CursorTests.CheckExecuteParamSequenceBadLen..L.__len__cSst‚dSr6)ÚAssertionError)Zslfrr r r rŽ?szBCursorTests.CheckExecuteParamSequenceBadLen..L.__getitem__Nrr r r r r<srr‡rˆ)r4r2rDÚZeroDivisionError)r rr r r ÚCheckExecuteParamSequenceBadLen:s  z+CursorTests.CheckExecuteParamSequenceBadLencCs<|j d¡|j dddi¡|j ¡}| |dd¡dS)Nr‡ú&select name from test where name=:nameÚnamer.rr‰r}r r r ÚCheckExecuteDictMappingFs  z#CursorTests.CheckExecuteDictMappingcCsJGdd„dtƒ}|j d¡|j d|ƒ¡|j ¡}| |dd¡dS)Nc@seZdZdd„ZdS)z6CursorTests.CheckExecuteDictMapping_Mapping..DcSsdS©Nr.r )r Úkeyr r r Ú __missing__NszBCursorTests.CheckExecuteDictMapping_Mapping..D.__missing__N)r'r(r)ršr r r r ÚDMsr›r‡r•rr.)Údictr4r2rJr)r r›rKr r r ÚCheckExecuteDictMapping_MappingLs   z+CursorTests.CheckExecuteDictMapping_MappingcCsN|j d¡| tj¡"|j dddi¡Wdƒn1s@0YdS)Nr‡z1select name from test where name=:name and id=:idr–r.©r4r2rDrr#rr r r Ú$CheckExecuteDictMappingTooLittleArgsVs z0CursorTests.CheckExecuteDictMappingTooLittleArgscCsH|j d¡| tj¡|j d¡Wdƒn1s:0YdS)Nr‡r•ržrr r r ÚCheckExecuteDictMappingNoArgs[s z)CursorTests.CheckExecuteDictMappingNoArgscCsN|j d¡| tj¡"|j dddi¡Wdƒn1s@0YdS)Nr‡rˆr–r.ržrr r r ÚCheckExecuteDictMappingUnnamed`s z*CursorTests.CheckExecuteDictMappingUnnamedcCs|j ¡dSr6)r4r8rr r r rGeszCursorTests.CheckClosecCsD|j d¡|j d¡|j d¡|j d¡| |jjd¡dS)Nrkr‡zupdate test set name='bar'é©r4r2rÚrowcountrr r r ÚCheckRowcountExecutehs     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éÿÿÿÿNr£rr r r ÚCheckRowcountSelectos zCursorTests.CheckRowcountSelectcCs2|j d¡|j dgd¢¡| |jjd¡dS)Nrkr,))r )r¢©rUrU)r4r2Ú executemanyrr¤rr r r ÚCheckRowcountExecutemanyxs z$CursorTests.CheckRowcountExecutemanycCs0|j d¡|j d¡|jd|jjdddS)Nr‡r¢z"total changes reported wrong value)Úmsg)r4r2Z assertLessr0rdrr r r ÚCheckTotalChanges}s  zCursorTests.CheckTotalChangescCs"|j ddd„tddƒDƒ¡dS)NrxcSsg|] }|f‘qSr r )Ú.0rr r r Ú ‡rcz8CursorTests.CheckExecuteManySequence..édén)r4r©Úrangerr r r ÚCheckExecuteManySequence†sz$CursorTests.CheckExecuteManySequencecCs"Gdd„dƒ}|j d|ƒ¡dS)Nc@s$eZdZdd„Zdd„Zdd„ZdS)z4CursorTests.CheckExecuteManyIterator..MyItercSs d|_dS©Né)Úvaluerr r r Ú__init__‹sz=CursorTests.CheckExecuteManyIterator..MyIter.__init__cSs|Sr6r rr r r Ú__iter__Žsz=CursorTests.CheckExecuteManyIterator..MyIter.__iter__cSs*|jdkrt‚n|jd7_|jfSdS)Né r )rµÚ StopIterationrr r r Ú__next__‘s z=CursorTests.CheckExecuteManyIterator..MyIter.__next__N)r'r(r)r¶r·rºr r r r ÚMyIterŠsr»rx©r4r©)r r»r r r ÚCheckExecuteManyIterator‰sz$CursorTests.CheckExecuteManyIteratorcCsdd„}|j d|ƒ¡dS)NcsstdƒD] }|fVqdSr³)r±)Úir r r Úmygen›s z4CursorTests.CheckExecuteManyGenerator..mygenrxr¼)r r¿r r r ÚCheckExecuteManyGeneratoršsz%CursorTests.CheckExecuteManyGeneratorcCs>| t¡ |j ddg¡Wdƒn1s00YdS)Nrsr¨©rDrtr4r©rr r r ÚCheckExecuteManyWrongSqlArg¡s z'CursorTests.CheckExecuteManyWrongSqlArgcCs@| tj¡ |j ddg¡Wdƒn1s20YdS)Nzselect ?r¨)rDrr#r4r©rr r r ÚCheckExecuteManySelect¥sz"CursorTests.CheckExecuteManySelectcCs<| t¡|j dd¡Wdƒn1s.0YdS)NrxrsrÁrr r r ÚCheckExecuteManyNotIterable©s z'CursorTests.CheckExecuteManyNotIterablecCsv|j d¡|j dd¡|j dd¡|j d¡g}|jD]}| |d¡q>| |dd¡| |dd ¡dS) Nrkrv)r´)ézselect id from test order by idrr´r rÅ)r4r2Úappendr)r ZlstrKr r r ÚCheckFetchIter­s   zCursorTests.CheckFetchItercCs@|j d¡|j ¡}| |dd¡|j ¡}| |d¡dS)Núselect name from testrr.r‰r}r r r Ú CheckFetchone¹s    zCursorTests.CheckFetchonecCs"|j ¡}| ¡}| |d¡dSr6)r0r1rJr)r ÚcurrKr r r ÚCheckFetchoneNoStatementÀs z$CursorTests.CheckFetchoneNoStatementcCsr| |jjd¡d|j_|j d¡|j d¡|j d¡|j d¡|j d¡|j ¡}| t|ƒd¡dS)Nr r¢rkz#insert into test(name) values ('A')z#insert into test(name) values ('B')z#insert into test(name) values ('C')rÈ)rr4Z arraysizer2Ú fetchmanyÚlen©r Úresr r r ÚCheckArraySizeÅs      zCursorTests.CheckArraySizecCsD|j d¡|j d¡}| t|ƒd¡|j d¡}| |g¡dS)NrÈr¯r ©r4r2rÌrrÍrÎr r r ÚCheckFetchmanyÖs    zCursorTests.CheckFetchmanycCs.|j d¡|jjdd}| t|ƒd¡dS)z0Checks if fetchmany works with keyword argumentsrÈr¯)Úsizer NrÑrÎr r r ÚCheckFetchmanyKwArgÝs zCursorTests.CheckFetchmanyKwArgcCs@|j d¡|j ¡}| t|ƒd¡|j ¡}| |g¡dS)NrÈr )r4r2ÚfetchallrrÍrÎr r r Ú CheckFetchallãs    zCursorTests.CheckFetchallcCs|j gd¢¡dS)N)rUér´)r4Z setinputsizesrr r r ÚCheckSetinputsizesêszCursorTests.CheckSetinputsizescCs|j dd¡dS)Nr´r©r4Z setoutputsizerr r r ÚCheckSetoutputsizeíszCursorTests.CheckSetoutputsizecCs|j d¡dSrrrÙrr r r ÚCheckSetoutputsizeNoColumnðsz&CursorTests.CheckSetoutputsizeNoColumncCs| |jj|j¡dSr6)rr4Z connectionr0rr r r ÚCheckCursorConnectionósz!CursorTests.CheckCursorConnectioncCsB| t¡$dd„}|j |¡}Wdƒn1s40YdS)NcSsdSr6r r r r r Úfùrcz/CursorTests.CheckWrongCursorCallable..f)rDrtr0r1)r rÝrÊr r r ÚCheckWrongCursorCallable÷s z$CursorTests.CheckWrongCursorCallablecCsLGdd„dƒ}|ƒ}| t¡t |¡}Wdƒn1s>0YdS)Nc@s eZdZdS)z.CursorTests.CheckCursorWrongClass..FooN)r'r(r)r r r r ÚFooýrcrß)rDrtrZCursor)r rßr.rÊr r r ÚCheckCursorWrongClassüs z!CursorTests.CheckCursorWrongClassc Csbd}dD]T}|j|d4|j | |¡d¡| |jjd¡Wdƒq1sR0YqdS)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)rfr4r2Úformatrr|)r Úsqlrâr r r ÚCheckLastRowIDOnReplaces z#CursorTests.CheckLastRowIDOnReplacecCs@|j dd¡| |jjd¡|j dd¡| |jjd¡dS)Nz2insert or ignore into test(unique_test) values (?))Útestr¢)r4r2rr|rr r r ÚCheckLastRowIDOnIgnore sþþz"CursorTests.CheckLastRowIDOnIgnorec CsØg}dD]¶}d}|jd |¡dŒ|j | |¡|f¡| ||jjf¡| tj¡&|j | |¡|f¡Wdƒn1s„0Y| ||jjf¡Wdƒq1s´0Yqgd¢}|  ||¡dS)N)ÚFAILÚABORTÚROLLBACKz.INSERT OR {} INTO test(unique_test) VALUES (?)z INSERT OR {}rá)©rèr¢rë©rérUrì©rêr×rí) rfrãr4r2rÆr|rDrrr)r ZresultsrâräZexpectedr r r ÚCheckLastRowIDInsertORs42z"CursorTests.CheckLastRowIDInsertORN)6r'r(r)r5r9rmrnrorprqrurwryrzr~r€rƒr…r†rŠr‘r”r—rrŸr r¡rGr¥r§rªr¬r²r½rÀrÂrÃrÄrÇrÉrËrÐrÒrÔrÖrØrÚrÛrÜrÞràrårçrîr r r r rhÚsf          rhc@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)Nr+z\create table test(id integer primary key, name text, bin binary, ratio number, ts timestamp))rr/rEr1rÊr2rr r r r5)s  zThreadTests.setUpcCs|j ¡|j ¡dSr6)rÊr8rErr r r r9.s zThreadTests.tearDowncCsRdd„}g}tj||j|dœd}| ¡| ¡t|ƒdkrN| d |¡¡dS)NcSsHz| ¡}| d¡WdStjy.YdS| d¡Yn0dS©Núdid not raise ProgrammingErrorúraised wrong exception)r1rÆrr#)rEÚerrorsrÊr r r Úrun3s z'ThreadTests.CheckConCursor..run©rEró©ÚtargetÚkwargsrÚ ©Ú threadingÚThreadrEÚstartÚjoinrÍÚfail©r rôróÚtr r r ÚCheckConCursor2s  zThreadTests.CheckConCursorcCsRdd„}g}tj||j|dœd}| ¡| ¡t|ƒdkrN| d |¡¡dS)NcSsHz| ¡| d¡WdStjy.YdS| d¡Yn0dSrð)r;rÆrr#rõr r r rôEs z'ThreadTests.CheckConCommit..runrõrörrùrúrr r r ÚCheckConCommitDs  zThreadTests.CheckConCommitcCsRdd„}g}tj||j|dœd}| ¡| ¡t|ƒdkrN| d |¡¡dS)NcSsHz| ¡| d¡WdStjy.YdS| d¡Yn0dSrð)r?rÆrr#rõr r r rôWs z)ThreadTests.CheckConRollback..runrõrörrùrúrr r r ÚCheckConRollbackVs  zThreadTests.CheckConRollbackcCsRdd„}g}tj||j|dœd}| ¡| ¡t|ƒdkrN| d |¡¡dS)NcSsHz| ¡| d¡WdStjy.YdS| d¡Yn0dSrð©r8rÆrr#rõr r r rôis z&ThreadTests.CheckConClose..runrõrörrùrúrr r r Ú CheckConClosehs  zThreadTests.CheckConClosecCsRdd„}g}tj||j|dœd}| ¡| ¡t|ƒdkrN| d |¡¡dS)NcSsJz| d¡| d¡WdStjy0YdS| d¡Yn0dS)Nú#insert into test(name) values ('a')rñrò©r2rÆrr#©rÊrór r r rô{s  z.ThreadTests.CheckCurImplicitBegin..runr rörrù©rûrürÊrýrþrÍrÿrr r r ÚCheckCurImplicitBeginzs  z!ThreadTests.CheckCurImplicitBegincCsRdd„}g}tj||j|dœd}| ¡| ¡t|ƒdkrN| d |¡¡dS)NcSsHz| ¡| d¡WdStjy.YdS| d¡Yn0dSrðrr r r r rôs z&ThreadTests.CheckCurClose..runr rörrùr rr r r Ú CheckCurCloseŒs  zThreadTests.CheckCurClosecCs^dd„}g}|j d¡tj||j|dœd}| ¡| ¡t|ƒdkrZ| d |¡¡dS)NcSsJz| d¡| d¡WdStjy0YdS| d¡Yn0dS)NrÈrñròrr r r r rôŸs  z(ThreadTests.CheckCurExecute..runrr rörrù©rÊr2rûrürýrþrÍrÿrr r r ÚCheckCurExecutežs   zThreadTests.CheckCurExecutecCsjdd„}g}|j d¡|j d¡tj||j|dœd}| ¡| ¡t|ƒdkrf| d |¡¡dS) NcSsHz| ¡}| d¡WdStjy.YdS| d¡Yn0dSrð)rJrÆrr#)rÊrórKr r r rô²s z)ThreadTests.CheckCurIterNext..runrrÈr rörrùr rr r r ÚCheckCurIterNext±s    zThreadTests.CheckCurIterNextN) r'r(r)r5r9rrrrr r rrr r r r rï(srïc@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)ÚConstructorTestscCst ddd¡}dS)NéÔr¸é)rZDate©r Údr r r Ú CheckDateÆszConstructorTests.CheckDatecCst ddd¡}dS)Né é'é#)rZTime©r rr r r Ú CheckTimeÉszConstructorTests.CheckTimecCst dddddd¡}dS)Nrr¸rrrr)rZ Timestamp©r Ztsr r r ÚCheckTimestampÌszConstructorTests.CheckTimestampcCst d¡}dSrr)rZ DateFromTicksrr r r ÚCheckDateFromTicksÏsz#ConstructorTests.CheckDateFromTickscCst d¡}dSrr)rZ TimeFromTicksrr r r ÚCheckTimeFromTicksÒsz#ConstructorTests.CheckTimeFromTickscCst d¡}dSrr)rZTimestampFromTicksrr r r ÚCheckTimestampFromTicksÕsz(ConstructorTests.CheckTimestampFromTickscCst d¡}dS)Ns')rZBinary)r Úbr r r Ú CheckBinaryØszConstructorTests.CheckBinaryN) r'r(r)rrrrrrr!r r r r rÅsrc@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)ÚExtensionTestscCsBt d¡}| ¡}| d¡| d¡| ¡d}| |d¡dS)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 rErÊrÏr r r ÚCheckScriptStringSqlÜs     z#ExtensionTests.CheckScriptStringSqlcCsLt d¡}| ¡}| tj¡| d¡Wdƒn1s>0YdS)Nr+z1create table test(x); asdf; create table test2(x)©rr/r1rDrr#©r rErÊr r r ÚCheckScriptSyntaxErrorés z%ExtensionTests.CheckScriptSyntaxErrorcCsLt d¡}| ¡}| tj¡| d¡Wdƒn1s>0YdS)Nr+z5create table test(sadfsadfdsa); select foo from hurz;r%r&r r r ÚCheckScriptErrorNormalïs z%ExtensionTests.CheckScriptErrorNormalcCs\t d¡}| ¡}| t¡}| d¡Wdƒn1s<0Y| t|jƒd¡dS)Nr+s9create table test(foo); insert into test(foo) values (5);z script argument must be unicode.) rr/r1rDrr#rrYrZ)r rErÊr\r r r ÚCheckCursorExecutescriptAsBytesõs   (z.ExtensionTests.CheckCursorExecutescriptAsBytescCs.t d¡}| d¡ ¡d}| |dd¡dS)Nr+zselect 5rr´z Basic test of Connection.execute)rr/r2rJr©r rEÚresultr r r ÚCheckConnectionExecuteüs z%ExtensionTests.CheckConnectionExecutecCsbt d¡}| d¡| dddg¡| d¡ ¡}| |dddd ¡| |d dd d ¡dS) Nr+zcreate table test(foo)z insert into test(foo) values (?)r¨©r×z!select foo from test order by foorrUz$Basic test of Connection.executemanyr r×)rr/r2r©rÕrr*r r r ÚCheckConnectionExecutemanys   z)ExtensionTests.CheckConnectionExecutemanycCs8t d¡}| d¡| d¡ ¡d}| |dd¡dS)Nr+z9create table test(foo); insert into test(foo) values (5);zselect foo from testrr´z&Basic test of Connection.executescript)rr/r#r2rJrr*r r r ÚCheckConnectionExecutescript s  z+ExtensionTests.CheckConnectionExecutescriptN) r'r(r)r$r'r(r)r,r.r/r r r r r"Ûs r"c@sTeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dS)ÚClosedConTestscCsJt d¡}| ¡| tj¡| ¡}Wdƒn1s<0YdS©Nr+)rr/r8rDr#r1r&r r r ÚCheckClosedConCursors z#ClosedConTests.CheckClosedConCursorcCsJt d¡}| ¡| tj¡| ¡Wdƒn1s<0YdSr1)rr/r8rDr#r;©r rEr r r ÚCheckClosedConCommits z#ClosedConTests.CheckClosedConCommitcCsJt d¡}| ¡| tj¡| ¡Wdƒn1s<0YdSr1)rr/r8rDr#r?r3r r r ÚCheckClosedConRollbacks z%ClosedConTests.CheckClosedConRollbackcCsTt d¡}| ¡}| ¡| tj¡| d¡Wdƒn1sF0YdS)Nr+zselect 4)rr/r1r8rDr#r2r&r r r ÚCheckClosedCurExecute"s  z$ClosedConTests.CheckClosedCurExecutecCsXt d¡}| ¡dd„}| tj¡| dd|¡Wdƒn1sJ0YdS)Nr+cSsdS©Nrr )rr r r rÝ,rcz3ClosedConTests.CheckClosedCreateFunction..fr.r )rr/r8rDr#Zcreate_function)r rErÝr r r ÚCheckClosedCreateFunction)s  z(ClosedConTests.CheckClosedCreateFunctioncCs^t d¡}| ¡Gdd„dƒ}| tj¡| dd|¡Wdƒn1sP0YdS)Nr+c@s$eZdZdd„Zdd„Zdd„ZdS)z6ClosedConTests.CheckClosedCreateAggregate..AggcSsdSr6r rr r r r¶4sz?ClosedConTests.CheckClosedCreateAggregate..Agg.__init__cSsdSr6r rŒr r r Ústep6sz;ClosedConTests.CheckClosedCreateAggregate..Agg.stepcSsdSr7r rr r r Úfinalize8sz?ClosedConTests.CheckClosedCreateAggregate..Agg.finalizeN)r'r(r)r¶r9r:r r r r ÚAgg3sr;r.r )rr/r8rDr#Zcreate_aggregate)r rEr;r r r ÚCheckClosedCreateAggregate0s  z)ClosedConTests.CheckClosedCreateAggregatecCsTt d¡}| ¡dd„}| tj¡| |¡Wdƒn1sF0YdS)Nr+cWstjSr6)rZDENY)Úargsr r r Ú authorizer@sz;ClosedConTests.CheckClosedSetAuthorizer..authorizer)rr/r8rDr#Zset_authorizer)r rEr>r r r ÚCheckClosedSetAuthorizer=s  z'ClosedConTests.CheckClosedSetAuthorizercCsVt d¡}| ¡dd„}| tj¡| |d¡Wdƒn1sH0YdS)Nr+cSsdSr6r r r r r ÚprogressHrcz?ClosedConTests.CheckClosedSetProgressCallback..progressr¯)rr/r8rDr#Zset_progress_handler)r rEr@r r r ÚCheckClosedSetProgressCallbackEs  z-ClosedConTests.CheckClosedSetProgressCallbackcCsHt d¡}| ¡| tj¡|ƒWdƒn1s:0YdSr1)rr/r8rDr#r3r r r ÚCheckClosedCallLs zClosedConTests.CheckClosedCallN) r'r(r)r2r4r5r6r8r<r?rArBr r r r r0s r0c@seZdZdd„ZdS)ÚClosedCurTestsc CsŽt d¡}| ¡}| ¡dD]j}|dvr0d}n|dkrFdddgf}ng}| tj¡"t||ƒ}||ŽWdƒq1s~0YqdS) Nr+)r2r©r#rÕrÌrJ)r2r#)zselect 4 union select 5r©zinsert into foo(bar) values (?)r¨r-)rr/r1r8rDr#Úgetattr)r rErÊZ method_nameÚparamsÚmethodr r r Ú CheckClosedSs  zClosedCurTests.CheckClosedN)r'r(r)rGr r r r rCRsrCc@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)Nr+zz CREATE TABLE test( id INTEGER PRIMARY KEY, name TEXT, unique_name TEXT UNIQUE ); rirr r r r5ls  zSqliteOnConflictTests.setUpcCs|j ¡|j ¡dSr6rjrr r r r9us zSqliteOnConflictTests.tearDowncCsœd|j_|j ¡|_|j d¡|j d¡|j d¡| tj¡|j d¡Wdƒn1sf0Y|j ¡|j d¡|  |j  ¡g¡dS)NÚBEGINú,INSERT INTO test(name) VALUES ('abort_test')ú8INSERT OR ROLLBACK INTO test(unique_name) VALUES ('foo')z"SELECT name, unique_name from test© r0rar1r4r2rDrrr;rrÕrr r r Ú.CheckOnConflictRollbackWithExplicitTransactionys    *  zDSqliteOnConflictTests.CheckOnConflictRollbackWithExplicitTransactioncCs d|j_|j ¡|_|j d¡|j d¡|j d¡| tj¡|j d¡Wdƒn1sf0Y|j ¡|j d¡|  |j  ¡ddg¡dS)NrIrJú5INSERT OR ABORT INTO test(unique_name) VALUES ('foo')ú"SELECT name, unique_name FROM test©Z abort_testNr˜rLrr r r Ú2CheckOnConflictAbortRaisesWithExplicitTransactionsˆs    *  zHSqliteOnConflictTests.CheckOnConflictAbortRaisesWithExplicitTransactionscCsr|j d¡|j d¡| tj¡|j d¡Wdƒn1sF0Y|j d¡| |j ¡g¡dS)NrJrKrO©r4r2rDrrrrÕrr r r Ú)CheckOnConflictRollbackWithoutTransaction˜s   * z?SqliteOnConflictTests.CheckOnConflictRollbackWithoutTransactioncCsv|j d¡|j d¡| tj¡|j d¡Wdƒn1sF0Y|j d¡| |j ¡ddg¡dS)NrJrNrOrPr˜rRrr r r Ú-CheckOnConflictAbortRaisesWithoutTransactions¢s   * zCSqliteOnConflictTests.CheckOnConflictAbortRaisesWithoutTransactionscCsZ|j d¡| tj¡|j d¡Wdƒn1s:0Y| |j ¡g¡dS)Nz4INSERT OR FAIL INTO test(unique_name) VALUES ('foo')rRrr r r Ú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 testr-©r4r2rrÕrr r r Ú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')rO)zVery different data!r.rVrr r r ÚCheckOnConflictReplaceºs   z,SqliteOnConflictTests.CheckOnConflictReplaceN) r'r(r)Ú__doc__r5r9rMrQrSrTrUrWrXr r r r rHes   rHc@s$eZdZedZdd„Zdd„ZdS)ÚMultiprocessTestsg@@cCs ttƒdSr6)rrrr r r r9ÅszMultiprocessTests.tearDownc CsNdt›d|j›d}tjtjd|gddtjtjd}| |j¡|  d|j   ¡  ¡¡t jt|jd }z‚z2|| d ¡Wdƒn1sŽ0YWn6t jyÐ}z|j t|ƒ¡WYd}~nd}~00|j d ¡W| ¡n | ¡0| |j¡z|jd td Wn(tjy:| ¡| ¡‚Yn0|  |jd¡dS)Nz´if 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)ÚencodingÚbufsizeÚstdinÚstdoutZstarted)Útimeoutzinsert into t values('test')zno errorÚend)Úinputr_)rÚCONNECTION_TIMEOUTÚ subprocessÚPopenÚsysÚ executableÚPIPErRZ communicaterr^ÚreadlineÚstriprr/r2rr]ÚwriterYr8Z assertIsNoneÚ returncoderZTimeoutExpiredÚkill)r ZSCRIPTÚprocr0Úexcr r r Ú&test_ctx_mgr_rollback_if_commit_failedÈs<úú û ,& z8MultiprocessTests.test_ctx_mgr_rollback_if_commit_failedN)r'r(r)rrbr9ror r r r rZÂsrZc Cs t td¡}t td¡}t td¡}t td¡}t td¡}t td¡}t td¡}t t d¡}t t d¡}t t ¡} t t ¡} t  |||||||||| | f ¡S)NZCheck)r^Z makeSuiterr*rhrïrr"r0rCrHr_rZZ 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            ýrpcCst ¡}| tƒ¡dSr6)r^ZTextTestRunnerrôrp)Zrunnerr r r ræsræÚ__main__)rcrûr^Zsqlite3rreZ test.supportrrrZTestCaserr*r_rhrïrr"r0rCrHrZrprær'r r r r Ús.7nP4C]G