a XC?hz*ć@sxddlZddlZddlmZmZGdd„dejƒZGdd„dejƒZGdd„dejƒZ d d „Z d d „Z e d krte ƒdS)éN)ŚTESTFNŚunlinkc@s^eZdZdd„Zdd„Zdd„Zdd„Ze e j d kd ”d d „ƒZ d d„Z dd„Z dd„ZdS)ŚCollationTestscCsHt d”}| t” | ddd„”Wdƒn1s:0YdS)Nś:memory:cSs||k||kS©N©©ŚxŚyrrś7/opt/alt/python39/lib64/python3.9/sqlite3/test/hooks.pyŚ!óz>CollationTests.CheckCreateCollationNotString..)ŚsqliteŚconnectŚ assertRaisesŚ TypeErrorŚcreate_collation©ŚselfŚconrrr ŚCheckCreateCollationNotStrings  z,CollationTests.CheckCreateCollationNotStringcCsVt d”}| t”}| dd”Wdƒn1s60Y| t|jƒd”dS)NrŚXé*zparameter must be callable)rrrrrŚ assertEqualŚstrŚ exception©rrŚcmrrr ŚCheckCreateCollationNotCallable#s  *z.CollationTests.CheckCreateCollationNotCallablecCsJt d”}| tj” | ddd„”Wdƒn1s<0YdS)NrucollƤcSs||k||kSrrrrrr r ,r z=CollationTests.CheckCreateCollationNotAscii..)rrrZProgrammingErrorrrrrr ŚCheckCreateCollationNotAscii)s z+CollationTests.CheckCreateCollationNotAsciicCslGdd„dtƒ}t d”}dd„}| |dƒ|”| d” ”}| |ddd ”| |d dd ”dS) Nc@seZdZdd„ZdS)z@CollationTests.CheckCreateCollationBadUpper..BadUpperStrcSsdSrr)rrrr Śupper0szFCollationTests.CheckCreateCollationBadUpper..BadUpperStr.upperN)Ś__name__Ś __module__Ś __qualname__r rrrr Ś BadUpperStr/sr$rcSs||k||k Srrrrrr r 3r z=CollationTests.CheckCreateCollationBadUpper..Śmycollz› select x from ( select 'a' as x union select 'b' as x ) order by x collate mycoll rŚbéŚa)rrrrŚexecuteŚfetchallr)rr$rr%Śresultrrr ŚCheckCreateCollationBadUpper.s z+CollationTests.CheckCreateCollationBadUpper)éér'z&old SQLite versions crash on this testcCs dd„}t d”}| d|”d}| |” ”}|j|gd¢dd| dd”| tj”}| |” ”}Wdƒn1s€0Y| t|j ƒd ”dS) NcSs||k||k Srrrrrr r%Bsz3CollationTests.CheckCollationIsUsed..mycollrr%śÉ select x from ( select 'a' as x union select 'b' as x union select 'c' as x ) order by x collate mycoll ©)Śc)r&)r(ś#the expected order was not returned©Śmsgś"no such collation sequence: mycoll) rrrr)r*rrŚOperationalErrorrr)rr%rŚsqlr+rrrr ŚCheckCollationIsUsed?s    ’ ,z#CollationTests.CheckCollationIsUsedcCsHdd„}t d”}| d|”d}| |” ”}|j|gd¢dddS) NcSs||k||k dS)Nlrrrrr r%[sz@CollationTests.CheckCollationReturnsLargeInteger..mycollrr%r/r0r2r3©rrrr)r*r)rr%rr7r+rrr Ś!CheckCollationReturnsLargeIntegerZs    ’z0CollationTests.CheckCollationReturnsLargeIntegercCsdt d”}| ddd„”| ddd„”| d” ”}| |ddd”| |d dd ”d S) z„ Register two different collation functions under the same name. Verify that the last one is actually used. rr%cSs||k||kSrrrrrr r sr z.cSs||k||k Srrrrrr r tr zi select x from (select 'a' as x union select 'b' as x) order by x collate mycoll rr&r'r(Nr9)rrr+rrr ŚCheckCollationRegisterTwicems  z*CollationTests.CheckCollationRegisterTwicecCsrt d”}| ddd„”| dd”| tj”}| d”Wdƒn1sR0Y| t|jƒd”dS)zu Register a collation, then deregister it. Make sure an error is raised if we try to use it. rr%cSs||k||kSrrrrrr r r z9CollationTests.CheckDeregisterCollation..Nz?select 'a' as x union select 'b' as x order by x collate mycollr5) rrrrr6r)rrrrrrr ŚCheckDeregisterCollation{s   (z'CollationTests.CheckDeregisterCollationN)r!r"r#rrrr,ŚunittestŚskipIfrŚsqlite_version_infor8r:r;r<rrrr rs ’ rc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ś ProgressTestscs>t d”}g‰‡fdd„}| |d”| d”| ˆ”dS)zK Test that the progress handler is invoked once it is set. rcsˆ d”dS©Nr©Śappendr©Zprogress_callsrr ŚprogressŽs z8ProgressTests.CheckProgressHandlerUsed..progressr'z0 create table foo(a, b) N)rrŚset_progress_handlerr)Ś assertTrue©rrrErrDr ŚCheckProgressHandlerUsedˆs     z&ProgressTests.CheckProgressHandlerUsedcsrt d”}g‰‡fdd„}| |d”| ”}| d”tˆƒ}g‰| |d”| d”tˆƒ}| ||”dS) z= Test that the opcode argument is respected. rcsˆ d”dSrArBrrDrr rEžs z0ProgressTests.CheckOpcodeCount..progressr'z1 create table foo (a, b) r.z1 create table bar (a, b) N)rrrFŚcursorr)ŚlenZassertGreaterEqual)rrrEŚcursZ first_countZ second_countrrDr ŚCheckOpcodeCount˜s      zProgressTests.CheckOpcodeCountcCs<t d”}dd„}| |d”| ”}| tj|jd”dS)zW Test that returning a non-zero value stops the operation in progress. rcSsdS)Nr'rrrrr rE“sz4ProgressTests.CheckCancelOperation..progressr'zcreate table bar (a, b)N)rrrFrJrr6r))rrrErLrrr ŚCheckCancelOperationÆs  żz"ProgressTests.CheckCancelOperationcsRt d”}d‰‡fdd„}| |d”| dd”| d” ”| ˆdd”dS) zc Test that setting the progress handler to None clears the previously set handler. rrcsd‰dS)Nr'rrr©Śactionrr rEĆsz1ProgressTests.CheckClearHandler..progressr'Nz&select 1 union select 2 union select 3z progress handler was not cleared)rrrFr)r*rrHrrOr ŚCheckClearHandler½s    zProgressTests.CheckClearHandlerN)r!r"r#rIrMrNrQrrrr r@‡sr@c@s>eZdZdd„Zdd„Zdd„Ze ej dkd”d d „ƒZ d S) ŚTraceCallbackTestscsTt d”}g‰‡fdd„}| |”| d”| ˆ”| tdd„ˆDƒƒ”dS)zI Test that the trace callback is invoked once it is set. rcsˆ |”dSrrB©Z statement©Śtraced_statementsrr ŚtraceÓsz8TraceCallbackTests.CheckTraceCallbackUsed..traceścreate table foo(a, b)css|]}d|vVqdS)zcreate table fooNr©Ś.0Zstmtrrr Ś Ųr z.N)rrŚset_trace_callbackr)rGŚany©rrrVrrTr ŚCheckTraceCallbackUsedĶs     z)TraceCallbackTests.CheckTraceCallbackUsedcsHt d”}g‰‡fdd„}| |”| d”| d”| ˆd”dS)zb Test that setting the trace callback to None clears the previously set callback. rcsˆ |”dSrrBrSrTrr rVąsz9TraceCallbackTests.CheckClearTraceCallback..traceNrWztrace callback was not cleared)rrr[r)Z assertFalser]rrTr ŚCheckClearTraceCallbackŚs     z*TraceCallbackTests.CheckClearTraceCallbackc s‚d‰t d”}g‰‡fdd„}| |”| d”| dˆ”| ”| t‡fdd„ˆDƒƒd tˆƒd  t tˆƒ”f”d S) zG Test that the statement can contain unicode literals. uĆ¶Ć¤Ć¼Ć–Ć„ĆœĆŸā‚¬rcsˆ |”dSrrBrSrTrr rVīsz5TraceCallbackTests.CheckUnicodeContent..traceścreate table foo(x)z insert into foo(x) values ('%s')c3s|]}ˆ|vVqdSrrrX)Ś unicode_valuerr rZ÷r z9TraceCallbackTests.CheckUnicodeContent..z-Unicode data %s garbled in trace callback: %sz, N) rrr[r)ZcommitrGr\ŚasciiŚjoinŚmapr]r)rUrar ŚCheckUnicodeContentēs    ’’z&TraceCallbackTests.CheckUnicodeContent)r-r-é z#sqlite3_prepare_v2 is not availablecsœg‰‡fdd„}ddg}| tt”tjtdd}t t”}| |”| ”}| |d”| d”| |d”tjd krŒ|  |d ”|  ˆ|”dS) Ncsˆ |”dSrrBrSrTrr rV’sz;TraceCallbackTests.CheckTraceCallbackContent..tracer`zinsert into foo(x) values(1))Zisolation_levelrzcreate table bar(x)r')r-ééé’’’’) Z addCleanuprrrrr[rJr)r?rCr)rrVZqueriesZcon1Zcon2ZcurrrTr ŚCheckTraceCallbackContentūs  ’     z,TraceCallbackTests.CheckTraceCallbackContentN) r!r"r#r^r_rer=r>rr?rjrrrr rRĢs   rRcCs4t td”}t td”}t td”}t |||f”S)NZCheck)r=Z makeSuiterr@rRZ TestSuite)Zcollation_suiteZprogress_suiteZ trace_suiterrr Śsuites   rkcCst ”}| tƒ”dSr)r=ZTextTestRunnerŚrunrk)Zrunnerrrr ŚtestsrmŚ__main__) r=Zsqlite3rZ test.supportrrZTestCaserr@rRrkrmr!rrrr ŚsjEK