o ­=?hxLã@svddlZddlZddlZddlmZdd„Zdd„Zdd„Zd d „Z d d „Z d d„Z dd„Z dd„Z dd„ZGdd„dƒZGdd„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/d0„d0eƒZGd1d2„d2eƒZd3d4„Zd5d6„Z e!d7kr¹e ƒdSdS)8éN)Ú gc_collectcCódS)NÚfoo©rrrúA/opt/alt/python310/lib64/python3.10/sqlite3/test/userfunctions.pyÚfunc_returntextórcCr)Nú12rrrrrÚfunc_returntextwithnull!rr cCr)NÚbarrrrrrÚfunc_returnunicode#rr cCr©Né*rrrrrÚfunc_returnint%rrcCr)Nç…ëQ¸ @rrrrrÚfunc_returnfloat'rrcCódS©NrrrrrÚfunc_returnnull)rrcCr)NóblobrrrrrÚfunc_returnblob+rrcCr)NìrrrrrÚfunc_returnlonglong-rrcCó dddS©NérrrrrrÚfunc_raiseexception/ó rc@óeZdZdd„Zdd„ZdS)Ú AggrNoStepcCrrr©ÚselfrrrÚ__init__3rzAggrNoStep.__init__cCr©Nérr rrrÚfinalize6rzAggrNoStep.finalizeN)Ú__name__Ú __module__Ú __qualname__r"r%rrrrr2ó rc@r)ÚAggrNoFinalizecCrrrr rrrr":rzAggrNoFinalize.__init__cCrrr©r!ÚxrrrÚstep=rzAggrNoFinalize.stepN)r&r'r(r"r-rrrrr*9r)r*c@ó$eZdZdd„Zdd„Zdd„ZdS)ÚAggrExceptionInInitcCrrrr rrrr"ArzAggrExceptionInInit.__init__cCrrrr+rrrr-DrzAggrExceptionInInit.stepcCrrrr rrrr%GrzAggrExceptionInInit.finalizeN©r&r'r(r"r-r%rrrrr/@ó r/c@r.)ÚAggrExceptionInStepcCrrrr rrrr"KrzAggrExceptionInStep.__init__cCrrrr+rrrr-NrzAggrExceptionInStep.stepcCrr rr rrrr%QrzAggrExceptionInStep.finalizeNr0rrrrr2Jr1r2c@r.)ÚAggrExceptionInFinalizecCrrrr rrrr"Urz AggrExceptionInFinalize.__init__cCrrrr+rrrr-XrzAggrExceptionInFinalize.stepcCrrrr rrrr%[rz AggrExceptionInFinalize.finalizeNr0rrrrr3Tr1r3c@r.)Ú AggrCheckTypecCs d|_dSr©Úvalr rrrr"_ó zAggrCheckType.__init__cCs.ttttdƒtdœ}t||t|ƒuƒ|_dS©N)ÚstrÚintÚfloatÚNoneZblob©r9r:r;ÚtypeÚbytesr6)r!Ú whichTyper6ÚtheTyperrrr-bs ÿzAggrCheckType.stepcCó|jSrr5r rrrr%gózAggrCheckType.finalizeNr0rrrrr4^s r4c@r.)ÚAggrCheckTypescCó d|_dS)Nrr5r rrrr"kr7zAggrCheckTypes.__init__cGs@ttttdƒtdœ}|D]}|jt||t|ƒuƒ7_q dSr8r=)r!r@ZvalsrAr6rrrr-ns ÿ ÿzAggrCheckTypes.stepcCrBrr5r rrrr%trCzAggrCheckTypes.finalizeNr0rrrrrDjs rDc@r.)ÚAggrSumcCrE)Nçr5r rrrr"xr7zAggrSum.__init__cCs|j|7_dSrr5)r!r6rrrr-{sz AggrSum.stepcCrBrr5r rrrr%~rCzAggrSum.finalizeNr0rrrrrFwr1rFc@r.)ÚAggrTextcCrE)NÚ©Útxtr rrrr"‚r7zAggrText.__init__cCs|j||_dSrrJ)r!rKrrrr-„sz AggrText.stepcCrBrrJr rrrr%†rCzAggrText.finalizeNr0rrrrrHs rHc@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 d8d9„Z!d:S);Ú 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)r;rrrrÚ–óz%FunctionTests.setUp..ZreturntoolargeintcSr)Nì rrrrrrO—sZraiseexceptionZisblobr$cSs t|tƒSr)Ú isinstancer?©r,rrrrOšs ZisnonecSs|duSrrrSrrrrO›rPZspaméÿÿÿÿcWst|ƒSr)ÚlenrSrrrrOœrPzcreate table test(t text))ÚsqliteÚconnectÚconÚcreate_functionrr r rrrrrrÚexecuter rrrÚsetUp‹s zFunctionTests.setUpcCs|j ¡dSr)rXÚcloser rrrÚtearDownŸszFunctionTests.tearDowncCsF| tj¡|j dddd„¡WdƒdS1swYdS)NÚblaéœÿÿÿcSsd|S)NérrSrrrrO¤rPz9FunctionTests.test_func_error_on_create..)Ú assertRaisesrVÚOperationalErrorrXrYr rrrÚtest_func_error_on_create¢s"ÿz'FunctionTests.test_func_error_on_createcCs@dd„}|ƒ}|tƒd<|j dd|¡|j ¡}| d¡dS)NcSs dd„}|S)NcSrr#rrrrrÚf¨rz=FunctionTests.test_func_ref_count..getfunc..fr)rdrrrÚgetfunc§sz2FunctionTests.test_func_ref_count..getfuncrZreftestrzselect reftest())ÚglobalsrXrYÚcursorrZ)r!rerdÚcurrrrÚtest_func_ref_count¦s   z!FunctionTests.test_func_ref_countcCó@|j ¡}| d¡| ¡d}| t|ƒt¡| |d¡dS)Nzselect returntext()rr©rXrgrZÚfetchoneÚ assertEqualr>r9©r!rhr6rrrÚtest_func_return_text²ó   z#FunctionTests.test_func_return_textcCs<|j ¡}| d¡ ¡d}| t|ƒt¡| |d¡dS)Nzselect returntextwithnull()rr rk)r!rhÚresrrrÚ$test_func_return_text_with_null_char¹s z2FunctionTests.test_func_return_text_with_null_charcCrj)Nzselect returnunicode()rr rkrnrrrÚtest_func_return_unicode¿rpz&FunctionTests.test_func_return_unicodecCrj)Nzselect returnint()rr)rXrgrZrlrmr>r:rnrrrÚtest_func_return_intÆrpz"FunctionTests.test_func_return_intcCsR|j ¡}| d¡| ¡d}| t|ƒt¡|dks |dkr'| d¡dSdS)Nzselect returnfloat()rgé&1¬ @gTã¥›Ä @z wrong value)rXrgrZrlrmr>r;ÚfailrnrrrÚtest_func_return_floatÍs   ÿz$FunctionTests.test_func_return_floatcCsD|j ¡}| d¡| ¡d}| t|ƒtdƒ¡| |d¡dS)Nzselect returnnull()r)rXrgrZrlrmr>rnrrrÚtest_func_return_nullÕs   z#FunctionTests.test_func_return_nullcCrj)Nzselect returnblob()rr)rXrgrZrlrmr>r?rnrrrÚtest_func_return_blobÜrpz#FunctionTests.test_func_return_blobcCs0|j ¡}| d¡| ¡d}| |d¡dS)Nzselect returnlonglong()rr©rXrgrZrlrmrnrrrÚtest_func_return_long_longãs   z(FunctionTests.test_func_return_long_longcCs*|j ¡}| d¡| | ¡d¡dS)Nzselect returnnan()r)rXrgrZÚ assertIsNonerl©r!rhrrrÚtest_func_return_nanés  z"FunctionTests.test_func_return_nancCsH|j ¡}| tj¡|j d¡WdƒdS1swYdS)Nzselect returntoolargeint())rXrgrarVrbrZr|rrrÚtest_func_return_too_large_intîs "ÿz,FunctionTests.test_func_return_too_large_intcCs^|j ¡}| tj¡}| d¡| ¡Wdƒn1swY| t|j ƒd¡dS)Nzselect raiseexception()z&user-defined function raised exception© rXrgrarVrbrZrlrmr9Ú exception©r!rhÚcmrrrÚtest_func_exceptionós   þz!FunctionTests.test_func_exceptioncCó2|j ¡}| dd¡| ¡d}| |d¡dS)Nzselect spam(?, ?))r$r`rr`ryrnrrrÚtest_any_argumentsúó   z FunctionTests.test_any_argumentscCs"|j d¡}| | ¡d¡dS)Nzselect isblob(x'')r)rXrZÚ assertTruerlr|rrrÚtest_empty_blobs zFunctionTests.test_empty_blobcCs*|j dtdƒf¡}| | ¡d¡dS)Nzselect isnone(?)rNr)rXrZr;r‡rlr|rrrÚtest_nan_floatszFunctionTests.test_nan_floatcCsd}| t||jjdd¡dS)Nz1Python int too large to convert to SQLite INTEGERúselect spam(?))rQ)ÚassertRaisesRegexÚ OverflowErrorrXrZ)r!ÚerrrrrÚtest_too_large_int sÿz FunctionTests.test_too_large_intc Cs*| td|jjdtdƒddd…f¡dS)Nz could not convert BLOB to bufferrŠrr`)r‹Ú ValueErrorrXrZÚ memoryviewr rrrÚtest_non_contiguous_blobsþz&FunctionTests.test_non_contiguous_blobcCs| td|jjdd¡dS)Nzsurrogates not allowedrŠ)u𐹭)r‹ÚUnicodeEncodeErrorrXrZr rrrÚtest_param_surrogatessþz#FunctionTests.test_param_surrogatescs¼g‰‡fdd„}|j dd|¡dtfdtfdtfdtfd tftd ƒtfd tfd tfd tfdtfttdƒƒtftdƒtfdt dƒfg }|D]\}}|j  d|f¡}|  ¡qE|  |ˆ¡dS)Ncsˆ |t|ƒf¡dSr)Úappendr>)Úarg©ZresultsrrÚ append_resultsz5FunctionTests.test_func_params..append_resultZ test_paramsr$rrTlÓ{ÑC lrÚinfÚtextr uË¢qË¡â±áµ—ᵉrr`zselect test_params(?)) rXrYr:r;r9r?Ú bytearrayÚrangerr>rZrlrm)r!r—Zdatasetr6Ú_rhrr–rÚtest_func_paramss*    ó  zFunctionTests.test_func_params)ééržzRequires SQLite 3.8.3 or highercCsˆtjjdd}|jjdd|ddtjdkr%|j d¡| |j d¡dS|  tj ¡|j d ¡WdƒdS1s=wYdS) N©Z return_valueZnondeterministicrF©Ú deterministic©ržérz.select nondeterministic() = nondeterministic()r`z>create index t on test(t) where nondeterministic() is not null) ÚunittestÚmockÚMockrXrYrVÚsqlite_version_inforZrmÚ call_countrarb©r!r¦rrrÚtest_func_non_deterministic9s  "ÿz)FunctionTests.test_func_non_deterministiccCs~tjjdd}|jjdd|ddtjdkr%|j d¡| |j d¡dSz |j d ¡WdStj y>|  d ¡YdSw) Nr r¢rTr¡r£z(select deterministic() = deterministic()r$z;create index t on test(t) where deterministic() is not nullz/Unexpected failure while creating partial index) r¥r¦r§rXrYrVr¨rZrmr©rbrurªrrrÚtest_func_deterministicDs  ÿz%FunctionTests.test_func_deterministiczSQLite < 3.8.3 neededcCsF| tj¡|jjddtddWdƒdS1swYdS)Nr¢rTr¡)rarVZNotSupportedErrorrXrYr:r rrrÚ%test_func_deterministic_not_supportedQs"ÿz3FunctionTests.test_func_deterministic_not_supportedcCsB| t¡|j ddtd¡WdƒdS1swYdS)Nr¢rT)raÚ TypeErrorrXrYr:r rrrÚ$test_func_deterministic_keyword_onlyVs "ÿz2FunctionTests.test_func_deterministic_keyword_onlycCsJt d¡}dd„}| dd|¡|dƒ}~~|g}| |¡~~tƒdS)NrMcSrrr)ÚtrrrÚmd5sum^rz=FunctionTests.test_function_destructor_via_gc..md5sumZmd5r$z(create table lang (name, first_appeared))rVrWrYr”r)r!Údestr±r,ÚyrrrÚtest_function_destructor_via_gcZs   z-FunctionTests.test_function_destructor_via_gcN)"r&r'r(r[r]rcrirorrrsrtrvrwrxrzr}r~rƒr…rˆr‰rŽr‘r“rr¥ZskipIfrVr¨r«r¬r­r¯r´rrrrrLŠs> !    rLc@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#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)NrMz´ create table test( t text, i integer, f float, n, b blob ) z6insert into test(t, i, f, n, b) values (?, ?, ?, ?, ?)rrrrZnostepr$Z nofinalizeZexcInitZexcStepZ excFinalizeZ checkTyper`Z checkTypesrTZmysumZaggtxt)rVrWrXrgrZrZcreate_aggregaterr*r/r2r3r4rDrFrHr|rrrr[ls    ÿzAggregateTests.setUpcCrrrr rrrr]…szAggregateTests.tearDowncCsB| tj¡|j ddt¡WdƒdS1swYdS)Nr^r_)rarVrbrXrYrFr rrrÚtest_aggr_error_on_createŠs"ÿz(AggregateTests.test_aggr_error_on_createcCsT|j ¡}| t¡ }| d¡Wdƒn1swY| t|jƒd¡dS)Nzselect nostep(t) from testz+'AggrNoStep' object has no attribute 'step')rXrgraÚAttributeErrorrZrmr9r€rrrrÚtest_aggr_no_stepŽs   ÿz AggregateTests.test_aggr_no_stepcCób|j ¡}| tj¡}| d¡| ¡d}Wdƒn1s!wY| t|j ƒd¡dS)Nzselect nofinalize(t) from testrú7user-defined aggregate's 'finalize' method raised errorr©r!rhr‚r6rrrÚtest_aggr_no_finalize”ó  þz$AggregateTests.test_aggr_no_finalizecCr¹)Nzselect excInit(t) from testrz7user-defined aggregate's '__init__' method raised errorrr»rrrÚtest_aggr_exception_in_init›r½z*AggregateTests.test_aggr_exception_in_initcCr¹)Nzselect excStep(t) from testrz3user-defined aggregate's 'step' method raised errorrr»rrrÚtest_aggr_exception_in_step¢r½z*AggregateTests.test_aggr_exception_in_stepcCr¹)Nzselect excFinalize(t) from testrrºrr»rrrÚtest_aggr_exception_in_finalize©r½z.AggregateTests.test_aggr_exception_in_finalizecCs8|j ¡}| ddtƒf¡| ¡d}| |d¡dS)Nzselect checkTypes('str', ?, ?)rrr`)rXrgrZr9rlrmrnrrrÚtest_aggr_check_param_str°ó  z(AggregateTests.test_aggr_check_param_strcCr„)Nzselect checkType('int', ?))rrr$ryrnrrrÚtest_aggr_check_param_int¶r†z(AggregateTests.test_aggr_check_param_intcCr„)Nzselect checkTypes('int', ?, ?))rérr`ryrnrrrÚtest_aggr_check_params_int¼r†z)AggregateTests.test_aggr_check_params_intcCr„)Nzselect checkType('float', ?))rrr$ryrnrrrÚtest_aggr_check_param_floatÂr†z*AggregateTests.test_aggr_check_param_floatcCr„)Nzselect checkType('None', ?)rrr$ryrnrrrÚtest_aggr_check_param_noneÈr†z)AggregateTests.test_aggr_check_param_nonecCs8|j ¡}| dtdƒf¡| ¡d}| |d¡dS)Nzselect checkType('blob', ?)rrr$)rXrgrZrrlrmrnrrrÚtest_aggr_check_param_blobÎrÂz)AggregateTests.test_aggr_check_param_blobcCsJ|j ¡}| d¡| dgd¢¡| d¡| ¡d}| |d¡dS)Nzdelete from testzinsert into test(i) values (?)))é )é)ézselect mysum(i) from testré<)rXrgrZZ executemanyrlrmrnrrrÚtest_aggr_check_aggr_sumÔs    z'AggregateTests.test_aggr_check_aggr_sumcCs&|j d¡}| ¡d}| |¡dS)Nz1select mysum(i) from (select 1 as i) where i == 0r)rXrZrlr{rnrrrÚtest_aggr_no_matchÜs  z!AggregateTests.test_aggr_no_matchc Csj|j ¡}dD]+}|j|d| d|f¡| ¡d}| ||¡Wdƒn1s-wYqdS)N)rr rJzselect aggtxt(?) from testr)rXrgZsubTestrZrlrm)r!rhrKr6rrrÚtest_aggr_textás  ý€ÿzAggregateTests.test_aggr_textN)r&r'r(r[r]r¶r¸r¼r¾r¿rÀrÁrÃrÅrÆrÇrÈrÍrÎrÏrrrrrµks$ rµc@s8eZdZedd„ƒZdd„Zdd„Zdd„Zd d „Zd S) ÚAuthorizerTestscCs,|tjkrtjS|dks|dkrtjStjS©NÚc2Út2)rVÚ SQLITE_SELECTZ SQLITE_DENYÚ SQLITE_OK©ÚactionZarg1Zarg2ZdbnameÚsourcerrrÚ authorizer_cbës zAuthorizerTests.authorizer_cbcCs6t d¡|_|j d¡|j d¡|j |j¡dS)NrMz¿ 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)rVrWrXZ executescriptrZZset_authorizerrÙr rrrr[ós   zAuthorizerTests.setUpcCrrrr rrrr]rzAuthorizerTests.tearDowncCóN| tj¡}|j d¡Wdƒn1swY| dt|jƒ¡dS)Nzselect * from t2Ú prohibited©rarVZ DatabaseErrorrXrZZassertInr9r€©r!r‚rrrÚtest_table_accessóÿz!AuthorizerTests.test_table_accesscCrÚ)Nzselect c2 from t1rÛrÜrÝrrrÚtest_column_access rßz"AuthorizerTests.test_column_accessN) r&r'r(Ú staticmethodrÙr[r]rÞràrrrrrÐês  rÐc@óeZdZedd„ƒZdS)ÚAuthorizerRaiseExceptionTestscCs(|tjkrt‚|dks|dkrt‚tjSrÑ)rVrÔrrÕrÖrrrrÙó z+AuthorizerRaiseExceptionTests.authorizer_cbN©r&r'r(rárÙrrrrrãórãc@râ)ÚAuthorizerIllegalTypeTestscCó(|tjkrdS|dks|dkrdStjS)NrGrÒrÓ©rVrÔrÕrÖrrrrÙräz(AuthorizerIllegalTypeTests.authorizer_cbNrårrrrrçrærçc@râ)ÚAuthorizerLargeIntegerTestscCrè)NlrÒrÓrérÖrrrrÙ!räz)AuthorizerLargeIntegerTests.authorizer_cbNrårrrrrê rærêcCs$ttttttg}t dd„|Dƒ¡S)NcSsg|] }t ¡ |¡‘qSr)r¥Z TestLoaderZloadTestsFromTestCase)Ú.0r°rrrÚ 4szsuite..)rµrçrêrãrÐrLr¥Z TestSuite)ZtestsrrrÚsuite*sú ÿrícCst ¡}| tƒ¡dSr)r¥ZTextTestRunnerÚrunrí)ZrunnerrrrÚtest7srïÚ__main__)"r¥Z unittest.mockZsqlite3rVZ test.supportrrr r rrrrrrrr*r/r2r3r4rDrFrHZTestCaserLrµrÐrãrçrêrírïr&rrrrÚsD        b$     ÿ