oQc@siddlZddlZddlZdejfdYZdZdZedkreendS(iNtRegressionTestscBseZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZRS(cCstjd|_dS(Ns:memory:(tsqlitetconnecttcon(tself((s-/sys/lib/python2.7/sqlite3/test/regression.pytsetUpscCs|jjdS(N(Rtclose(R((s-/sys/lib/python2.7/sqlite3/test/regression.pyttearDown scCs |jj}|jddS(Nspragma user_version(Rtcursortexecute(Rtcur((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckPragmaUserVersion#scCsTtjddtj}z |jj}|jdWd|j|jXdS(Ns:memory:t detect_typesspragma schema_version(RRtPARSE_COLNAMESRRR R(RRR ((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckPragmaSchemaVersion(s  cCstjddd}gtdD]}|j^q"}|djdxDtdD]6}|djdgtdD]}|f^qxqXWx-tdD]}||jd|d qW|jdS( Ns:memory:tcached_statementsiiscreate table test(x)i sinsert into test(x) values (?)t sselect x from test(RRtxrangeRR tranget executemanytrollback(RRtxtcursorsti((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckStatementReset2s%4cCsc|jj}|jd|j|jddd|jd|j|jddddS(Ns select 1 as "foo bar [datetime]"isfoo barsselect 1 as "foo baz"sfoo baz(RRR t assertEqualt description(RR ((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckColumnNameWithSpacesAs   cCsjtjd}g}xDtdD]6}|j}|j||jdt|q"W|jdS(Ns:memory:iisselect 1 x union select (RRRRtappendR tstrR(RRRRR ((s-/sys/lib/python2.7/sqlite3/test/regression.pyt#CheckStatementFinalizationOnCloseDbIs  cCstjdkrdStjd}|jd|jdy|jdWntjk rcnX|jdy|jWn!tjk r|jdnXdS( Niis:memory:s3create table foo(x, unique(x) on conflict rollback)sinsert into foo(x) values (1)sinsert into foo(x) values (2)s1pysqlite knew nothing about the implicit ROLLBACK(iii(Rtsqlite_version_infoRR t DatabaseErrortcommittOperationalErrortfail(RR((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckOnConflictRollbackWs   cCs4|jjd|jjd|jjddS(sm pysqlite would crash with older SQLite versions unless a workaround is implemented. screate table foo(bar)sdrop table fooN(RR (R((s-/sys/lib/python2.7/sqlite3/test/regression.pyt-CheckWorkaroundForBuggySqliteTransferBindingsgscCs|jjddS(s pysqlite used to segfault with SQLite versions 3.5.x. These return NULL for "no-operation" statements tN(RR (R((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckEmptyStatementpscCstjd}|jdS(s  With pysqlite 2.4.0 you needed to use a string or a APSW connection object for opening database connections. Formerly, both bytestrings and unicode strings used to work. Let's make sure unicode strings work in the future. u:memory:N(RRR(RR((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckUnicodeConnectws cCsd}tjddtj}|jd|jdtjjf|j||jd|jd|jd|j|d S( s pysqlite until 2.4.1 did not rebuild the row_cast_map when recompiling a statement. This test exhibits the problem. sselect * from foos:memory:R screate table foo(bar timestamp)sinsert into foo(bar) values (?)sdrop table fooscreate table foo(bar integer)sinsert into foo(bar) values (5)N(RRtPARSE_DECLTYPESR tdatetimetnow(RtSELECTR((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckTypeMapUsages     cCs|jttjiddS(s! See issue 3312. N(t assertRaisest TypeErrorRtregister_adaptertNone(R((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckRegisterAdapterscCs,tjd}|jtt|dddS(s! See issue 3312. s:memory:tisolation_leveluéN(RRR.tUnicodeEncodeErrortsetattr(RR((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckSetIsolationLevelscCsdtjfdY}tjd}||}y$|jdj|jdWn'tjk rnn|jdnXdS(s[ Verifies that cursor methods check wether base class __init__ was called. tCursorcBseZdZRS(cSsdS(N((RR((s-/sys/lib/python2.7/sqlite3/test/regression.pyt__init__s(t__name__t __module__R8(((s-/sys/lib/python2.7/sqlite3/test/regression.pyR7ss:memory:s select 4+5s#should have raised ProgrammingErrorN(RR7RR tfetchallR#tProgrammingError(RR7RR ((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckCursorConstructorCallChecks cCspdtjfdY}|d}y|j}|jdWn'tjk rXn|jdnXdS(s_ Verifies that connection methods check wether base class __init__ was called. t ConnectioncBseZdZRS(cSsdS(N((Rtname((s-/sys/lib/python2.7/sqlite3/test/regression.pyR8s(R9R:R8(((s-/sys/lib/python2.7/sqlite3/test/regression.pyR>ss:memory:s#should have raised ProgrammingErrorN(RR>RR#R<(RR>RR ((s-/sys/lib/python2.7/sqlite3/test/regression.pyt#CheckConnectionConstructorCallChecks  csdtjffdY}dtjfdY|d}|j}|jd|jddddg|jd |jy|j|jd Wn'tj k rn|jd nXd S(s Verifies that subclassed cursor classes are correctly registered with the connection object, too. (fetch-across-rollback problem) R>cseZfdZRS(cs |S(N((R(R7(s-/sys/lib/python2.7/sqlite3/test/regression.pyRs(R9R:R((R7(s-/sys/lib/python2.7/sqlite3/test/regression.pyR>sR7cBseZdZRS(cSstjj||dS(N(RR7R8(RR((s-/sys/lib/python2.7/sqlite3/test/regression.pyR8s(R9R:R8(((s-/sys/lib/python2.7/sqlite3/test/regression.pyR7ss:memory:screate table foo(x)sinsert into foo(x) values (?)iiisselect x from foos!should have raised InterfaceErrorN(i(i(i( RR>R7RR RRR;R#tInterfaceError(RR>RR ((R7s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckCursorRegistrations      cCstjddd}dS(s Verifies that creating a connection in autocommit mode works. 2.5.3 introduced a regression so that these could no longer be created. s:memory:R3N(RRR1(RR((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckAutoCommitscCsF|jj}|jd|jd|jd|j}dS(s Verifies that running a PRAGMA statement that does an autocommit does work. This did not work in 2.5.3/2.5.4. screate table foo(bar)sinsert into foo(bar) values (5)spragma page_sizeN(RRR tfetchone(RR trow((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckPragmaAutocommits    cCsdddY}|}|jt|jj||jt|jj||jt|jj||jt|jj|dS(s See http://bugs.python.org/issue7478 It was possible to successfully register callbacks that could not be hashed. Return codes of PyDict_SetItem were not checked properly. t NotHashablecBseZdZdZRS(c_sdS(N((Rtargstkw((s-/sys/lib/python2.7/sqlite3/test/regression.pyt__call__scSs tdS(N(R/(R((s-/sys/lib/python2.7/sqlite3/test/regression.pyt__hash__s(R9R:RJRK(((s-/sys/lib/python2.7/sqlite3/test/regression.pyRGs N((R.R/Rtcreate_functiontcreate_aggregatetset_authorizertset_progress_handler(RRGtvar((s-/sys/lib/python2.7/sqlite3/test/regression.pyt CheckSetDicts  cCs|jtj|jddS(s} Call a connection with a non-string SQL request: check error handling of the statement constructor. iN(R.RtWarningR(R((s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckConnectionCallscs~tjd}|jjdjdfd}|jtj"jdd|DWdQXdS(s http://bugs.python.org/issue10811 Recursively using a cursor, such as when reusing it from a generator led to segfaults. Now we catch recursive cursor usage and raise a ProgrammingError. s:memory:screate table a (bar)screate table b (baz)c3sjdddVdS(Nsinsert into a (bar) values (?)i(i(R ((R (s-/sys/lib/python2.7/sqlite3/test/regression.pytfoossinsert into b (baz) values (?)css|]}|fVqdS(N((t.0R((s-/sys/lib/python2.7/sqlite3/test/regression.pys sN(RRRR R.R<R(RRRT((R s-/sys/lib/python2.7/sqlite3/test/regression.pytCheckRecursiveCursorUse s    c Cstjddtj}|j}|jd|jd|jd|jdg|jD]}|d^qe}|j|tjdd d d d dd tjdd d d d dd gdS(s http://bugs.python.org/issue14720 The microsecond parsing of convert_timestamp() should pad with zeros, since the microsecond string "456" actually represents "456000". s:memory:R sCREATE TABLE t (x TIMESTAMP)s4INSERT INTO t (x) VALUES ('2012-04-04 15:06:00.456')s:INSERT INTO t (x) VALUES ('2012-04-04 15:06:00.123456789')sSELECT * FROM tiiiiii@i@N(RRR)RR R;RR*(RRR Rtvalues((s-/sys/lib/python2.7/sqlite3/test/regression.pyt'CheckConvertTimestampMicrosecondPadding s     # (R9R:RRR RRRRR$R%R'R(R-R2R6R=R@RBRCRFRQRSRVRX(((s-/sys/lib/python2.7/sqlite3/test/regression.pyRs.                  cCs"tjtd}tj|fS(NtCheck(tunittestt makeSuiteRt TestSuite(tregression_suite((s-/sys/lib/python2.7/sqlite3/test/regression.pytsuite;scCs tj}|jtdS(N(RZtTextTestRunnertrunR^(trunner((s-/sys/lib/python2.7/sqlite3/test/regression.pyttest?s t__main__( R*RZtsqlite3RtTestCaseRR^RbR9(((s-/sys/lib/python2.7/sqlite3/test/regression.pyts