a XC?h*Jã@shddlZddlZddlZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z Gdd„dƒZ Gdd„dƒZGdd„dƒZGdd„dƒZGdd„dƒZGdd„dƒZGd d!„d!ƒZGd"d#„d#ƒZGd$d%„d%ƒZGd&d'„d'ejƒZGd(d)„d)ejƒZGd*d+„d+ejƒZGd,d-„d-eƒZGd.d/„d/eƒZGd0d1„d1eƒZd2d3„Zd4d5„Zed6krdeƒdS)7éNcCsdS)NÚfoo©rrrú?/opt/alt/python39/lib64/python3.9/sqlite3/test/userfunctions.pyÚfunc_returntextsrcCsdS)Nú12rrrrrÚfunc_returntextwithnullsrcCsdS)NÚbarrrrrrÚfunc_returnunicode sr cCsdS©Né*rrrrrÚfunc_returnint"sr cCsdS)Nç…ëQ¸ @rrrrrÚfunc_returnfloat$srcCsdS©NrrrrrÚfunc_returnnull&srcCsdS)NóblobrrrrrÚfunc_returnblob(srcCsdS)NìrrrrrÚfunc_returnlonglong*srcCs dddS©NérrrrrrÚfunc_raiseexception,src@seZdZdd„Zdd„ZdS)Ú AggrNoStepcCsdSrr©ÚselfrrrÚ__init__0szAggrNoStep.__init__cCsdS©NérrrrrÚfinalize3szAggrNoStep.finalizeN)Ú__name__Ú __module__Ú __qualname__rrrrrrr/src@seZdZdd„Zdd„ZdS)ÚAggrNoFinalizecCsdSrrrrrrr7szAggrNoFinalize.__init__cCsdSrr©rÚxrrrÚstep:szAggrNoFinalize.stepN)rr r!rr%rrrrr"6sr"c@s$eZdZdd„Zdd„Zdd„ZdS)ÚAggrExceptionInInitcCs dddSrrrrrrr>szAggrExceptionInInit.__init__cCsdSrrr#rrrr%AszAggrExceptionInInit.stepcCsdSrrrrrrrDszAggrExceptionInInit.finalizeN©rr r!rr%rrrrrr&=sr&c@s$eZdZdd„Zdd„Zdd„ZdS)ÚAggrExceptionInStepcCsdSrrrrrrrHszAggrExceptionInStep.__init__cCs dddSrrr#rrrr%KszAggrExceptionInStep.stepcCsdSr rrrrrrNszAggrExceptionInStep.finalizeNr'rrrrr(Gsr(c@s$eZdZdd„Zdd„Zdd„ZdS)ÚAggrExceptionInFinalizecCsdSrrrrrrrRsz AggrExceptionInFinalize.__init__cCsdSrrr#rrrr%UszAggrExceptionInFinalize.stepcCs dddSrrrrrrrXsz AggrExceptionInFinalize.finalizeNr'rrrrr)Qsr)c@s$eZdZdd„Zdd„Zdd„ZdS)Ú AggrCheckTypecCs d|_dSr©Úvalrrrrr\szAggrCheckType.__init__cCs.ttttdƒtdœ}t||t|ƒuƒ|_dS©N)ÚstrÚintÚfloatÚNoneZblob©r.r/r0ÚtypeÚbytesr,)rÚ whichTyper,ÚtheTyperrrr%_s ÿzAggrCheckType.stepcCs|jSrr+rrrrrdszAggrCheckType.finalizeNr'rrrrr*[sr*c@s$eZdZdd„Zdd„Zdd„ZdS)ÚAggrCheckTypescCs d|_dS)Nrr+rrrrrhszAggrCheckTypes.__init__cGs@ttttdƒtdœ}|D]"}|jt||t|ƒuƒ7_qdSr-r2)rr5Zvalsr6r,rrrr%ks  ÿzAggrCheckTypes.stepcCs|jSrr+rrrrrqszAggrCheckTypes.finalizeNr'rrrrr7gsr7c@s$eZdZdd„Zdd„Zdd„ZdS)ÚAggrSumcCs d|_dS)Nçr+rrrrruszAggrSum.__init__cCs|j|7_dSrr+)rr,rrrr%xsz AggrSum.stepcCs|jSrr+rrrrr{szAggrSum.finalizeNr'rrrrr8tsr8c@s$eZdZdd„Zdd„Zdd„ZdS)ÚAggrTextcCs d|_dS)NÚ©ÚtxtrrrrrszAggrText.__init__cCs|j||_dSrr<)rr=rrrr%sz AggrText.stepcCs|jSrr<rrrrrƒszAggrText.finalizeNr'rrrrr:~sr:c@seZdZdd„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,„Ze ejd-kd.¡d/d0„ƒZe ejd-kd.¡d1d2„ƒZe ejd-kd3¡d4d5„ƒZd6d7„Z d8S)9Ú FunctionTestscCst d¡|_|j ddt¡|j ddt¡|j ddt¡|j ddt¡|j ddt¡|j ddt ¡|j d dt ¡|j d dt ¡|j d dd d „¡|j dddd „¡|j ddt ¡|j dddd „¡|j dddd „¡|j dddd „¡|j  d¡dS)Nú:memory:Z returntextrZreturntextwithnullZ returnunicodeZ returnintZ returnfloatZ returnnullZ returnblobZreturnlonglongZ returnnancSstdƒS)NÚnan)r0rrrrÚ“óz%FunctionTests.setUp..ZreturntoolargeintcSsdS)Nì rrrrrrA”rBZraiseexceptionZisblobrcSs t|tƒSr)Ú isinstancer4©r$rrrrA—rBZisnonecSs|duSrrrErrrrA˜rBZspaméÿÿÿÿcWst|ƒSr)ÚlenrErrrrA™rBzcreate table test(t text))ÚsqliteÚconnectÚconÚcreate_functionrrr r rrrrrÚexecuterrrrÚsetUpˆs  zFunctionTests.setUpcCs|j ¡dSr)rJÚcloserrrrÚtearDownœszFunctionTests.tearDowncCsD| tj¡$|j dddd„¡Wdƒn1s60YdS)NÚblaéœÿÿÿcSsd|S)NérrErrrrA¡rBz6FunctionTests.CheckFuncErrorOnCreate..)Ú assertRaisesrHÚOperationalErrorrJrKrrrrÚCheckFuncErrorOnCreateŸsz$FunctionTests.CheckFuncErrorOnCreatecCs@dd„}|ƒ}|tƒd<|j dd|¡|j ¡}| d¡dS)NcSs dd„}|S)NcSsdSrrrrrrÚf¥sz;FunctionTests.CheckFuncRefCount..getfunc..fr)rVrrrÚgetfunc¤sz0FunctionTests.CheckFuncRefCount..getfuncrZreftestrzselect reftest())ÚglobalsrJrKÚcursorrL)rrWrVÚcurrrrÚCheckFuncRefCount£s   zFunctionTests.CheckFuncRefCountcCs@|j ¡}| d¡| ¡d}| t|ƒt¡| |d¡dS)Nzselect returntext()rr©rJrYrLÚfetchoneÚ assertEqualr3r.©rrZr,rrrÚCheckFuncReturnText¯s    z!FunctionTests.CheckFuncReturnTextcCs<|j ¡}| d¡ ¡d}| t|ƒt¡| |d¡dS)Nzselect returntextwithnull()rrr\)rrZÚresrrrÚCheckFuncReturnTextWithNullChar¶s z-FunctionTests.CheckFuncReturnTextWithNullCharcCs@|j ¡}| d¡| ¡d}| t|ƒt¡| |d¡dS)Nzselect returnunicode()rrr\r_rrrÚCheckFuncReturnUnicode¼s    z$FunctionTests.CheckFuncReturnUnicodecCs@|j ¡}| d¡| ¡d}| t|ƒt¡| |d¡dS)Nzselect returnint()rr )rJrYrLr]r^r3r/r_rrrÚCheckFuncReturnIntÃs    z FunctionTests.CheckFuncReturnIntcCsN|j ¡}| d¡| ¡d}| t|ƒt¡|dks@|dkrJ| d¡dS)Nzselect returnfloat()rgé&1¬ @gTã¥›Ä @z wrong value)rJrYrLr]r^r3r0Úfailr_rrrÚCheckFuncReturnFloatÊs    z"FunctionTests.CheckFuncReturnFloatcCsD|j ¡}| d¡| ¡d}| t|ƒtdƒ¡| |d¡dS)Nzselect returnnull()r)rJrYrLr]r^r3r_rrrÚCheckFuncReturnNullÒs    z!FunctionTests.CheckFuncReturnNullcCs@|j ¡}| d¡| ¡d}| t|ƒt¡| |d¡dS)Nzselect returnblob()rr)rJrYrLr]r^r3r4r_rrrÚCheckFuncReturnBlobÙs    z!FunctionTests.CheckFuncReturnBlobcCs0|j ¡}| d¡| ¡d}| |d¡dS)Nzselect returnlonglong()rr©rJrYrLr]r^r_rrrÚCheckFuncReturnLongLongàs   z%FunctionTests.CheckFuncReturnLongLongcCs*|j ¡}| d¡| | ¡d¡dS)Nzselect returnnan()r)rJrYrLZ assertIsNoner]©rrZrrrÚCheckFuncReturnNaNæs  z FunctionTests.CheckFuncReturnNaNcCsF|j ¡}| tj¡|j d¡Wdƒn1s80YdS)Nzselect returntoolargeint())rJrYrSrHrTrLrkrrrÚCheckFuncReturnTooLargeIntës z(FunctionTests.CheckFuncReturnTooLargeIntcCs^|j ¡}| tj¡"}| d¡| ¡Wdƒn1s>0Y| t|j ƒd¡dS)Nzselect raiseexception()z&user-defined function raised exception© rJrYrSrHrTrLr]r^r.Ú exception©rrZÚcmrrrÚCheckFuncExceptionðs   &z FunctionTests.CheckFuncExceptioncCs2|j ¡}| dd¡| ¡d}| |d¡dS)Nzselect spam(?, ?))rrRrrRrir_rrrÚCheckAnyArguments÷s   zFunctionTests.CheckAnyArgumentscCs"|j d¡}| | ¡d¡dS)Nzselect isblob(x'')r)rJrLÚ assertTruer]rkrrrÚCheckEmptyBlobýs zFunctionTests.CheckEmptyBlobcCs*|j dtdƒf¡}| | ¡d¡dS)Nzselect isnone(?)r@r)rJrLr0rtr]rkrrrÚ CheckNaNFloatszFunctionTests.CheckNaNFloatcCsd}| t||jjdd¡dS)Nz1Python int too large to convert to SQLite INTEGERúselect spam(?))rC)ÚassertRaisesRegexÚ OverflowErrorrJrL)rÚerrrrrÚCheckTooLargeIntsÿzFunctionTests.CheckTooLargeIntc Cs*| td|jjdtdƒddd…f¡dS)Nz could not convert BLOB to bufferrwrrR)rxÚ ValueErrorrJrLÚ memoryviewrrrrÚCheckNonContiguousBlob sþz$FunctionTests.CheckNonContiguousBlobcCs| td|jjdd¡dS)Nzsurrogates not allowedrw)u𐹭)rxÚUnicodeEncodeErrorrJrLrrrrÚCheckParamSurrogatessþz"FunctionTests.CheckParamSurrogatescs¼g‰‡fdd„}|j dd|¡dtfdtfdtfdtfd tftd ƒtfd tfd tfd tfdtfttdƒƒtftdƒtfdt dƒfg }|D] \}}|j  d|f¡}|  ¡qŠ|  |ˆ¡dS)Ncsˆ |t|ƒf¡dSr)Úappendr3)Úarg©ZresultsrrÚ append_resultsz4FunctionTests.CheckFuncParams..append_resultZ test_paramsrr rFlÓ{ÑC lr ÚinfÚtextruË¢qË¡â±áµ—ᵉrrRzselect test_params(?)) rJrKr/r0r.r4Ú bytearrayÚranger}r3rLr]r^)rr„Zdatasetr,Ú_rZrrƒrÚCheckFuncParamss*    ó  zFunctionTests.CheckFuncParams)éér‹zRequires SQLite 3.8.3 or highercCs„tjjdd}|jjdd|ddtjdkrH|j d¡| |j d¡n8|  tj ¡|j d ¡Wdƒn1sv0YdS) N©Z return_valueZnondeterministicrF©Ú deterministic©r‹érz.select nondeterministic() = nondeterministic()rRz>create index t on test(t) where nondeterministic() is not null) ÚunittestÚmockÚMockrJrKrHÚsqlite_version_inforLr^Ú call_countrSrT©rr“rrrÚCheckFuncNonDeterministic6s  z'FunctionTests.CheckFuncNonDeterministiccCs|tjjdd}|jjdd|ddtjdkrH|j d¡| |j d¡n0z|j d ¡Wntj yv|  d ¡Yn0dS) NrrrTrŽrz(select deterministic() = deterministic()rz;create index t on test(t) where deterministic() is not nullz/Unexpected failure while creating partial index) r’r“r”rJrKrHr•rLr^r–rTrer—rrrÚCheckFuncDeterministicAs  z$FunctionTests.CheckFuncDeterministiczSQLite < 3.8.3 neededcCsD| tj¡$|jjddtddWdƒn1s60YdS)NrrTrŽ)rSrHZNotSupportedErrorrJrKr/rrrrÚ"CheckFuncDeterministicNotSupportedNsz0FunctionTests.CheckFuncDeterministicNotSupportedcCs@| t¡"|j ddtd¡Wdƒn1s20YdS)NrrT)rSÚ TypeErrorrJrKr/rrrrÚ!CheckFuncDeterministicKeywordOnlySs z/FunctionTests.CheckFuncDeterministicKeywordOnlyN)!rr r!rMrOrUr[r`rbrcrdrfrgrhrjrlrmrrrsrurvr{r~r€rŠr’ZskipIfrHr•r˜r™ršrœrrrrr>‡s: !   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!S)"ÚAggregateTestsc CsÎt d¡|_|j ¡}| d¡| dddddtdƒf¡|j dd t¡|j d d t¡|j d d t ¡|j d d t ¡|j d d t ¡|j ddt ¡|j ddt ¡|j dd t¡|j dd t¡dS)Nr?z´ create table test( t text, i integer, f float, n, b blob ) z6insert into test(t, i, f, n, b) values (?, ?, ?, ?, ?)rrr rZnosteprZ nofinalizeZexcInitZexcStepZ excFinalizeZ checkTyperRZ checkTypesrFZmysumZaggtxt)rHrIrJrYrLr}Zcreate_aggregaterr"r&r(r)r*r7r8r:rkrrrrMYs   ÿzAggregateTests.setUpcCsdSrrrrrrrOrszAggregateTests.tearDowncCs@| tj¡ |j ddt¡Wdƒn1s20YdS)NrPrQ)rSrHrTrJrKr8rrrrÚCheckAggrErrorOnCreatewsz%AggregateTests.CheckAggrErrorOnCreatecCsT|j ¡}| t¡}| d¡Wdƒn1s40Y| t|jƒd¡dS)Nzselect nostep(t) from testz+'AggrNoStep' object has no attribute 'step')rJrYrSÚAttributeErrorrLr^r.rorprrrÚCheckAggrNoStep{s  (zAggregateTests.CheckAggrNoStepcCsb|j ¡}| tj¡&}| d¡| ¡d}Wdƒn1sB0Y| t|j ƒd¡dS)Nzselect nofinalize(t) from testrú7user-defined aggregate's 'finalize' method raised errorrn©rrZrqr,rrrÚCheckAggrNoFinalizes   *z"AggregateTests.CheckAggrNoFinalizecCsb|j ¡}| tj¡&}| d¡| ¡d}Wdƒn1sB0Y| t|j ƒd¡dS)Nzselect excInit(t) from testrz7user-defined aggregate's '__init__' method raised errorrnr¢rrrÚCheckAggrExceptionInInitˆs   *z'AggregateTests.CheckAggrExceptionInInitcCsb|j ¡}| tj¡&}| d¡| ¡d}Wdƒn1sB0Y| t|j ƒd¡dS)Nzselect excStep(t) from testrz3user-defined aggregate's 'step' method raised errorrnr¢rrrÚCheckAggrExceptionInSteps   *z'AggregateTests.CheckAggrExceptionInStepcCsb|j ¡}| tj¡&}| d¡| ¡d}Wdƒn1sB0Y| t|j ƒd¡dS)Nzselect excFinalize(t) from testrr¡rnr¢rrrÚCheckAggrExceptionInFinalize–s   *z+AggregateTests.CheckAggrExceptionInFinalizecCs8|j ¡}| ddtƒf¡| ¡d}| |d¡dS)Nzselect checkTypes('str', ?, ?)rrrR)rJrYrLr.r]r^r_rrrÚCheckAggrCheckParamStrs  z%AggregateTests.CheckAggrCheckParamStrcCs2|j ¡}| dd¡| ¡d}| |d¡dS)Nzselect checkType('int', ?))r rrrir_rrrÚCheckAggrCheckParamInt£s   z%AggregateTests.CheckAggrCheckParamIntcCs2|j ¡}| dd¡| ¡d}| |d¡dS)Nzselect checkTypes('int', ?, ?))r érrRrir_rrrÚCheckAggrCheckParamsInt©s   z&AggregateTests.CheckAggrCheckParamsIntcCs2|j ¡}| dd¡| ¡d}| |d¡dS)Nzselect checkType('float', ?))r rrrir_rrrÚCheckAggrCheckParamFloat¯s   z'AggregateTests.CheckAggrCheckParamFloatcCs2|j ¡}| dd¡| ¡d}| |d¡dS)Nzselect checkType('None', ?)rrrrir_rrrÚCheckAggrCheckParamNoneµs   z&AggregateTests.CheckAggrCheckParamNonecCs8|j ¡}| dtdƒf¡| ¡d}| |d¡dS)Nzselect checkType('blob', ?)rrr)rJrYrLr}r]r^r_rrrÚCheckAggrCheckParamBlob»s  z&AggregateTests.CheckAggrCheckParamBlobcCsJ|j ¡}| d¡| dgd¢¡| d¡| ¡d}| |d¡dS)Nzdelete from testzinsert into test(i) values (?)))é )é)ézselect mysum(i) from testré<)rJrYrLZ executemanyr]r^r_rrrÚCheckAggrCheckAggrSumÁs     z$AggregateTests.CheckAggrCheckAggrSumc Csj|j ¡}dD]V}|j|d6| d|f¡| ¡d}| ||¡Wdƒq1sZ0YqdS)N)rrr<zselect aggtxt(?) from testr)rJrYZsubTestrLr]r^)rrZr=r,rrrÚ CheckAggrTextÉs   zAggregateTests.CheckAggrTextN)rr r!rMrOržr r£r¤r¥r¦r§r¨rªr«r¬r­r²r³rrrrrXs rc@s8eZdZedd„ƒZdd„Zdd„Zdd„Zd d „Zd S) ÚAuthorizerTestscCs,|tjkrtjS|dks |dkr&tjStjS©NÚc2Út2)rHÚ SQLITE_SELECTZ SQLITE_DENYÚ SQLITE_OK©ÚactionZarg1Zarg2ZdbnameÚsourcerrrÚ authorizer_cbÓs  zAuthorizerTests.authorizer_cbcCs6t d¡|_|j d¡|j d¡|j |j¡dS)Nr?z¿ create table t1 (c1, c2); create table t2 (c1, c2); insert into t1 (c1, c2) values (1, 2); insert into t2 (c1, c2) values (4, 5); zselect c2 from t2)rHrIrJZ executescriptrLZset_authorizerr½rrrrrMÛs   zAuthorizerTests.setUpcCsdSrrrrrrrOészAuthorizerTests.tearDowncCsN| tj¡}|j d¡Wdƒn1s.0Y| dt|jƒ¡dS)Nzselect * from t2Ú prohibited©rSrHZ DatabaseErrorrJrLZassertInr.ro©rrqrrrÚtest_table_accessìs*z!AuthorizerTests.test_table_accesscCsN| tj¡}|j d¡Wdƒn1s.0Y| dt|jƒ¡dS)Nzselect c2 from t1r¾r¿rÀrrrÚtest_column_accessñs*z"AuthorizerTests.test_column_accessN) rr r!Ú staticmethodr½rMrOrÁrÂrrrrr´Òs  r´c@seZdZedd„ƒZdS)ÚAuthorizerRaiseExceptionTestscCs(|tjkrt‚|dks|dkr"t‚tjSrµ)rHr¸r|r¹rºrrrr½÷s  z+AuthorizerRaiseExceptionTests.authorizer_cbN©rr r!rÃr½rrrrrÄösrÄc@seZdZedd„ƒZdS)ÚAuthorizerIllegalTypeTestscCs(|tjkrdS|dks|dkr"dStjS)Nr9r¶r·©rHr¸r¹rºrrrr½s  z(AuthorizerIllegalTypeTests.authorizer_cbNrÅrrrrrÆÿsrÆc@seZdZedd„ƒZdS)ÚAuthorizerLargeIntegerTestscCs(|tjkrdS|dks|dkr"dStjS)Nlr¶r·rÇrºrrrr½ s  z)AuthorizerLargeIntegerTests.authorizer_cbNrÅrrrrrÈsrÈc CsJt td¡}t td¡}t t¡}t |||t t¡t t¡t t¡f¡S)NZCheck) r’Z makeSuiter>rr´Z TestSuiterÄrÆrÈ)Zfunction_suiteZaggregate_suiteZauthorizer_suiterrrÚsuites   úrÉcCst ¡}| tƒ¡dSr)r’ZTextTestRunnerÚrunrÉ)ZrunnerrrrÚtestsrËÚ__main__) r’Z unittest.mockZsqlite3rHrrr r rrrrrrr"r&r(r)r*r7r8r:ZTestCaser>rr´rÄrÆrÈrÉrËrrrrrÚs>       Rz$