U .‘cz*ć@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)ŚCollationTestsc Cs4t d”}| t”| ddd„”W5QRXdS)Nś:memory:cSs||k||kS©N©©ŚxŚyrrś7/opt/alt/python38/lib64/python3.8/sqlite3/test/hooks.pyŚ!óz>CollationTests.CheckCreateCollationNotString..)ŚsqliteŚconnectŚ assertRaisesŚ TypeErrorŚcreate_collation©ŚselfŚconrrr ŚCheckCreateCollationNotStrings  z,CollationTests.CheckCreateCollationNotStringc CsBt d”}| t”}| dd”W5QRX| t|jƒd”dS)NrŚXé*zparameter must be callable)rrrrrŚ assertEqualŚstrŚ exception©rrŚcmrrr ŚCheckCreateCollationNotCallable#s  z.CollationTests.CheckCreateCollationNotCallablec Cs6t d”}| tj”| ddd„”W5QRXdS)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 testc CsŽdd„}t d”}| d|”d}| |” ”}|j|dddgd d | dd”| tj”}| |” ”}W5QRX| 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.CheckCollationIsUsedcCsJdd„}t d”}| d|”d}| |” ”}|j|dddgd d dS) NcSs||k||k dS)Nlrrrrr r%[sz@CollationTests.CheckCollationReturnsLargeInteger..mycollrr%r/r0r2r3r4r5©rrrr)r*r)rr%rr9r+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(Nr;)rrr+rrr ŚCheckCollationRegisterTwicems  z*CollationTests.CheckCollationRegisterTwicec Cs^t d”}| ddd„”| dd”| tj”}| d”W5QRX| 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 mycollr7) rrrrr8r)rrrrrrr ŚCheckDeregisterCollation{s   z'CollationTests.CheckDeregisterCollationN)r!r"r#rrrr,ŚunittestŚskipIfrŚsqlite_version_infor:r<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©rrrGrrFr Ś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”dSrCrDrrFrr rGžs z0ProgressTests.CheckOpcodeCount..progressr'z1 create table foo (a, b) r.z1 create table bar (a, b) N)rrrHŚcursorr)ŚlenZassertGreaterEqual)rrrGŚcursZ first_countZ second_countrrFr Ś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 rG“sz4ProgressTests.CheckCancelOperation..progressr'zcreate table bar (a, b)N)rrrHrLrr8r))rrrGrNrrr Ś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 rGĆsz1ProgressTests.CheckClearHandler..progressr'Nz&select 1 union select 2 union select 3z progress handler was not cleared)rrrHr)r*rrJrrQr ŚCheckClearHandler½s    zProgressTests.CheckClearHandlerN)r!r"r#rKrOrPrSrrrr rB‡srBc@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ˆ |”dSrrD©Z statement©Śtraced_statementsrr ŚtraceÓsz8TraceCallbackTests.CheckTraceCallbackUsed..traceścreate table foo(a, b)css|]}d|kVqdS)zcreate table fooNr©Ś.0Zstmtrrr Ś Ųsz.N)rrŚset_trace_callbackr)rIŚany©rrrXrrVr Ś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ˆ |”dSrrDrUrVrr rXąsz9TraceCallbackTests.CheckClearTraceCallback..traceNrYztrace callback was not cleared)rrr]r)Z assertFalser_rrVr Ś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ˆ |”dSrrDrUrVrr rXīsz5TraceCallbackTests.CheckUnicodeContent..traceścreate table foo(x)z insert into foo(x) values ("%s")c3s|]}ˆ|kVqdSrrrZ)Ś unicode_valuerr r\÷sz9TraceCallbackTests.CheckUnicodeContent..z-Unicode data %s garbled in trace callback: %sz, N) rrr]r)ZcommitrIr^ŚasciiŚjoinŚmapr_r)rWrcr Ś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ˆ |”dSrrDrUrVrr rX’sz;TraceCallbackTests.CheckTraceCallbackContent..tracerbzinsert into foo(x) values(1))Zisolation_levelrzcreate table bar(x)r')r-ééé’’’’) Z addCleanuprrrrr]rLr)rArEr)rrXZqueriesZcon1Zcon2ZcurrrVr ŚCheckTraceCallbackContentūs  ’     z,TraceCallbackTests.CheckTraceCallbackContentN) r!r"r#r`rargr?r@rrArlrrrr rTĢs   rTcCs4t td”}t td”}t td”}t |||f”S)NZCheck)r?Z makeSuiterrBrTZ TestSuite)Zcollation_suiteZprogress_suiteZ trace_suiterrr Śsuites   rmcCst ”}| tƒ”dSr)r?ZTextTestRunnerŚrunrm)Zrunnerrrr ŚtestsroŚ__main__) r?Zsqlite3rZ test.supportrrZTestCaserrBrTrmror!rrrr ŚsjEK