Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib64/python3.7/sqlite3/test/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib64/python3.7/sqlite3/test/__pycache__/regression.cpython-37.pyc

B

� f5G�@s�ddlZddlZddlZddlZddlmZddlmZGdd�dej	�Z
Gdd�d�ZGdd	�d	ej	�ZGd
d�dej	�Z
dd
�Zdd�Zedkr�e�dS)�N)�support)�patchc@seZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
�ej
dkd�dd��Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Z d7d8�Z!d9d:�Z"d;d<�Z#d=S)>�RegressionTestscCst�d�|_dS)Nz:memory:)�sqlite�connect�con)�self�r	�</opt/alt/python37/lib64/python3.7/sqlite3/test/regression.py�setUp"szRegressionTests.setUpcCs|j��dS)N)r�close)rr	r	r
�tearDown%szRegressionTests.tearDowncCs|j��}|�d�dS)Nzpragma user_version)r�cursor�execute)r�curr	r	r
�CheckPragmaUserVersion(s
z&RegressionTests.CheckPragmaUserVersioncCs@tjdtjd�}z|j��}|�d�Wd|��|��XdS)Nz:memory:)�detect_typeszpragma schema_version)rr�PARSE_COLNAMESrrrr)rrrr	r	r
�CheckPragmaSchemaVersion-s
z(RegressionTests.CheckPragmaSchemaVersioncs�tjddd���fdd�td�D�}|d�d�x.td�D]"}|d�d	d
d�td�D��q<Wx&td�D]}||�d|d�qlW���dS)
Nz:memory:�)Zcached_statementscsg|]}����qSr	)r)�.0�x)rr	r
�
<listcomp><sz7RegressionTests.CheckStatementReset.<locals>.<listcomp>rzcreate table test(x)�
zinsert into test(x) values (?)cSsg|]
}|f�qSr	r	)rrr	r	r
r?s� zselect x from test)rr�ranger�executemany�rollback)r�cursors�ir	)rr
�CheckStatementReset7s"z#RegressionTests.CheckStatementResetcCsN|j��}|�d�|�|jddd�|�d�|�|jddd�dS)Nz select 1 as "foo bar [datetime]"rzfoo bar [datetime]zselect 1 as "foo baz"zfoo baz)rrr�assertEqualZdescription)rrr	r	r
�CheckColumnNameWithSpacesFs



z)RegressionTests.CheckColumnNameWithSpacescCsPt�d�}g}x4td�D](}|��}|�|�|�dt|��qW|��dS)Nz:memory:�izselect 1 x union select )rrrr�appendr�strr)rrrrrr	r	r
�#CheckStatementFinalizationOnCloseDbNs

z3RegressionTests.CheckStatementFinalizationOnCloseDb)��r(zneeds sqlite 3.2.2 or newercCs�t�d�}|�d�|�d�y|�d�Wntjk
rBYnX|�d�y|��Wn tjk
rz|�d�YnXdS)Nz:memory:z3create table foo(x, unique(x) on conflict rollback)zinsert into foo(x) values (1)zinsert into foo(x) values (2)z1pysqlite knew nothing about the implicit ROLLBACK)rrrZ
DatabaseError�commit�OperationalErrorZfail)rrr	r	r
�CheckOnConflictRollback\s



z'RegressionTests.CheckOnConflictRollbackcCs(|j�d�|j�d�|j�d�dS)zm
        pysqlite would crash with older SQLite versions unless
        a workaround is implemented.
        zcreate table foo(bar)zdrop table fooN)rr)rr	r	r
�-CheckWorkaroundForBuggySqliteTransferBindingsksz=RegressionTests.CheckWorkaroundForBuggySqliteTransferBindingscCs|j�d�dS)z
        pysqlite used to segfault with SQLite versions 3.5.x. These return NULL
        for "no-operation" statements
        �N)rr)rr	r	r
�CheckEmptyStatementtsz#RegressionTests.CheckEmptyStatementcCshd}tjdtjd�}|�d�|�dtj��f�|�|�|�d�|�d�|�d�|�|�d	S)
z�
        pysqlite until 2.4.1 did not rebuild the row_cast_map when recompiling
        a statement. This test exhibits the problem.
        zselect * from fooz:memory:)rzcreate table foo(bar timestamp)zinsert into foo(bar) values (?)zdrop table foozcreate table foo(bar integer)zinsert into foo(bar) values (5)N)rr�PARSE_DECLTYPESr�datetimeZnow)rZSELECTrr	r	r
�CheckTypeMapUsage{s




z!RegressionTests.CheckTypeMapUsagec	CsP|�tj��$}|j�dttdg��f���WdQRXd}|�|t	|j
��dS)Nz"select 'xxx' || ? || 'yyy' colname�z9Could not decode to UTF-8 column 'colname' with text 'xxx)�assertRaisesrr*rr�bytes�	bytearray�fetchoneZassertInr%Z	exception)r�cm�msgr	r	r
�CheckErrorMsgDecodeError�s
 z(RegressionTests.CheckErrorMsgDecodeErrorcCs|�ttjid�dS)z!
        See issue 3312.
        N)r3�	TypeErrorrZregister_adapter)rr	r	r
�CheckRegisterAdapter�sz$RegressionTests.CheckRegisterAdaptercs�G�fdd�dt�}t�d��d�_xHdD]@}|j|d��*|�_|���_|���_||��_WdQRXq*Wd�_d�_dtfdtfd	tfd
tfdtfg}xR|D]J\}}|j|d��0|�	|��|�_WdQRX|�
�jd�WdQRXq�WdS)Ncs eZdZdd�Z�fdd�ZdS)z9RegressionTests.CheckSetIsolationLevel.<locals>.CustomStrcSsdS)Nr	)rr	r	r
�upper�sz?RegressionTests.CheckSetIsolationLevel.<locals>.CustomStr.uppercs
d�_dS)Nr-)�isolation_level)r)rr	r
�__del__�szARegressionTests.CheckSetIsolationLevel.<locals>.CustomStr.__del__N)�__name__�
__module__�__qualname__r<r>r	)rr	r
�	CustomStr�srBz:memory:)r-�DEFERREDZ	IMMEDIATEZ	EXCLUSIVE)�levelrC���abczIMMEDIATEEXCLUSIVE�é)r%rrr=�subTest�lower�
capitalizer:�
ValueErrorr3r!)rrBrDZpairs�value�excr	)rr
�CheckSetIsolationLevel�s$



z&RegressionTests.CheckSetIsolationLevelc	CspGdd�dtj�}t�d�}||�}|�tj��|�d���WdQRX|�tjd��|��WdQRXdS)zd
        Verifies that cursor methods check whether base class __init__ was
        called.
        c@seZdZdd�ZdS)z?RegressionTests.CheckCursorConstructorCallCheck.<locals>.CursorcSsdS)Nr	)rrr	r	r
�__init__�szHRegressionTests.CheckCursorConstructorCallCheck.<locals>.Cursor.__init__N)r?r@rArPr	r	r	r
�Cursor�srQz:memory:z
select 4+5Nz$^Base Cursor\.__init__ not called\.$)	rrQrr3�ProgrammingErrorr�fetchall�assertRaisesRegexr)rrQrrr	r	r
�CheckCursorConstructorCallCheck�s
z/RegressionTests.CheckCursorConstructorCallCheckcCs(Gdd�dt�}|j�d|d�f�dS)za
        The Python 3.0 port of the module didn't cope with values of subclasses of str.
        c@seZdZdS)z/RegressionTests.CheckStrSubclass.<locals>.MyStrN)r?r@rAr	r	r	r
�MyStr�srVzselect ?rGN)r%rr)rrVr	r	r
�CheckStrSubclass�sz RegressionTests.CheckStrSubclassc	Cs>Gdd�dtj�}|d�}|�tj��|��}WdQRXdS)zh
        Verifies that connection methods check whether base class __init__ was
        called.
        c@seZdZdd�ZdS)zGRegressionTests.CheckConnectionConstructorCallCheck.<locals>.ConnectioncSsdS)Nr	)r�namer	r	r
rP�szPRegressionTests.CheckConnectionConstructorCallCheck.<locals>.Connection.__init__N)r?r@rArPr	r	r	r
�
Connection�srYz:memory:N)rrYr3rRr)rrYrrr	r	r
�#CheckConnectionConstructorCallCheck�sz3RegressionTests.CheckConnectionConstructorCallCheckc	s�G�fdd�dtj�}Gdd�dtj��|d�}|��}|�d�|�ddd	d
g�|�d�|��|�tj��|�	�WdQRXdS)
z�
        Verifies that subclassed cursor classes are correctly registered with
        the connection object, too.  (fetch-across-rollback problem)
        cseZdZ�fdd�ZdS)z;RegressionTests.CheckCursorRegistration.<locals>.Connectioncs�|�S)Nr	)r)rQr	r
r�szBRegressionTests.CheckCursorRegistration.<locals>.Connection.cursorN)r?r@rArr	)rQr	r
rY�srYc@seZdZdd�ZdS)z7RegressionTests.CheckCursorRegistration.<locals>.CursorcSstj�||�dS)N)rrQrP)rrr	r	r
rP�sz@RegressionTests.CheckCursorRegistration.<locals>.Cursor.__init__N)r?r@rArPr	r	r	r
rQ�srQz:memory:zcreate table foo(x)zinsert into foo(x) values (?))r')�)rzselect x from fooN)
rrYrQrrrrr3ZInterfaceErrorrS)rrYrrr	)rQr
�CheckCursorRegistration�s

z'RegressionTests.CheckCursorRegistrationcCstjddd�}dS)z�
        Verifies that creating a connection in autocommit mode works.
        2.5.3 introduced a regression so that these could no longer
        be created.
        z:memory:N)r=)rr)rrr	r	r
�CheckAutoCommit�szRegressionTests.CheckAutoCommitcCs4|j��}|�d�|�d�|�d�|��}dS)z�
        Verifies that running a PRAGMA statement that does an autocommit does
        work. This did not work in 2.5.3/2.5.4.
        zcreate table foo(bar)zinsert into foo(bar) values (5)zpragma page_sizeN)rrrr6)rr�rowr	r	r
�CheckPragmaAutocommit�s




z%RegressionTests.CheckPragmaAutocommitcCs|�tj|jd�dS)z}
        Call a connection with a non-string SQL request: check error handling
        of the statement constructor.
        rEN)r3r�Warningr)rr	r	r
�CheckConnectionCallsz#RegressionTests.CheckConnectionCallcCs"dd�}|�tj|jjd|�dS)NcSsdS)NrEr	)�a�br	r	r
�collation_cbsz4RegressionTests.CheckCollation.<locals>.collation_cbu�)r3rrRrZcreate_collation)rrdr	r	r
�CheckCollation
szRegressionTests.CheckCollationc	sft�d�}|�����d���d��fdd�}|�tj����ddd�|�D��Wd	QRXd	S)
z�
        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.
        z:memory:zcreate table a (bar)zcreate table b (baz)c3s��dd�dVdS)Nzinsert into a (bar) values (?))rErE)rr	)rr	r
�foo!sz4RegressionTests.CheckRecursiveCursorUse.<locals>.foozinsert into b (baz) values (?)css|]}|fVqdS)Nr	)rrr	r	r
�	<genexpr>'sz:RegressionTests.CheckRecursiveCursorUse.<locals>.<genexpr>N)rrrrr3rRr)rrrfr	)rr
�CheckRecursiveCursorUses


z'RegressionTests.CheckRecursiveCursorUsec
Cs�tjdtjd�}|��}|�d�|�d�|�d�|�d�dd�|��D�}|�|t�d	d
d
ddd
d�t�d	d
d
ddd
d�g�dS)z�
        http://bugs.python.org/issue14720

        The microsecond parsing of convert_timestamp() should pad with zeros,
        since the microsecond string "456" actually represents "456000".
        z:memory:)rzCREATE TABLE t (x TIMESTAMP)z4INSERT INTO t (x) VALUES ('2012-04-04 15:06:00.456')z:INSERT INTO t (x) VALUES ('2012-04-04 15:06:00.123456789')zSELECT * FROM tcSsg|]}|d�qS)rr	)rrr	r	r
r<szKRegressionTests.CheckConvertTimestampMicrosecondPadding.<locals>.<listcomp>i�r[��ri@�i@�N)rrr/rrrSr!r0)rrr�valuesr	r	r
�'CheckConvertTimestampMicrosecondPadding)s



z7RegressionTests.CheckConvertTimestampMicrosecondPaddingcCs|jttjddd�dS)Nz:memory:�{)r=)r3r:rr)rr	r	r
�CheckInvalidIsolationLevelTypeCsz.RegressionTests.CheckInvalidIsolationLevelTypecCsRt�d�}|�t|d�|�t|d�|��}|�t|jd�|�t|jd�dS)Nz:memory:z	select 1z	select 1z
 select 2z	select 2)rrr3rLrr)rrrr	r	r
�CheckNullCharacterIs
z"RegressionTests.CheckNullCharacterc
Cs�t�d�}|�d�|�|jd�d}x�t|�d��D]�\}}|j||d��p|�d|f�|��|dkr~|�|dd�n2|dkr�|�|dd�n|d	kr�|�|dd	�|d7}Wd
QRXq6W|�|dd�d
S)
z�
        Connection.commit() did reset cursors, which made sqlite3
        to return rows multiple times when fetched from cursors
        after commit. See issues 10513 and 23129 for details.
        z:memory:z�
        create table t(c);
        create table t2(c);
        insert into t values(0);
        insert into t values(1);
        insert into t values(2);
        r-rzselect c from t)rr^zinsert into t2(c) values (?)rEr(Nr'z'should have returned exactly three rows)	rrZ
executescriptr!r=�	enumeraterrIr))rrZcounterrr^r	r	r
�CheckCommitCursorResetRs"
z&RegressionTests.CheckCommitCursorResetcCsBdd�}t�d�}t�|�}t�||�}|�|�~~t��dS)zm
        The interpreter shouldn't crash in case Cursor.__init__() is called
        more than once.
        cWsdS)Nr	)�argsr	r	r
�callbackvsz/RegressionTests.CheckBpo31770.<locals>.callbackz:memory:N)rrrQ�weakref�refrPrZ
gc_collect)rrsrrrur	r	r
�
CheckBpo31770qs


zRegressionTests.CheckBpo31770c	Cs |�t��|j`WdQRXdS)N)r3�AttributeErrorrr=)rr	r	r
�CheckDelIsolation_levelSegfault�sz/RegressionTests.CheckDelIsolation_levelSegfaultN)$r?r@rArr
rrr r"r&�unittestZskipIfrZsqlite_version_infor+r,r.r1r9r;rOrUrWrZr\r]r_rarerhrlrnrorqrvrxr	r	r	r
r!s:
		
	rc@s"eZdZdZddd�Zdd�ZdS)�UnhashableFuncNcCsd|_||_dS)Nr)�calls�return_value)rr|r	r	r
rP�szUnhashableFunc.__init__cOs|jd7_|jS)NrE)r{r|)rrr�kwargsr	r	r
�__call__�szUnhashableFunc.__call__)N)r?r@rA�__hash__rPr~r	r	r	r
rz�s
rzc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�UnhashableCallbacksTestCasez�
    https://bugs.python.org/issue34052

    Registering unhashable callbacks raises TypeError, callbacks are not
    registered in SQLite after such registration attempt.
    cCst�d�|_dS)Nz:memory:)rrr)rr	r	r
r�sz!UnhashableCallbacksTestCase.setUpcCs|j��dS)N)rr)rr	r	r
r
�sz$UnhashableCallbacksTestCase.tearDownc	CsLtdd�}|�td��|j�|d�WdQRX|j�d�|�|j�dS)Nr)r|zunhashable typerEzSELECT 1)rzrTr:rZset_progress_handlerr�assertFalser{)r�fr	r	r
�test_progress_handler�s

z1UnhashableCallbacksTestCase.test_progress_handlerc	Cstd}t�}|�td��|j�|d|�WdQRXd|}|�tj|��|j�d|�WdQRX|�|j	�dS)N�	func_namezunhashable typerzno such function: %szSELECT %s())
rzrTr:rZcreate_functionrr*rr�r{)rr�r�r8r	r	r
�	test_func�sz%UnhashableCallbacksTestCase.test_funcc	CsLttjd�}|�td��|j�|�WdQRX|j�d�|�|j	�dS)N)r|zunhashable typezSELECT 1)
rzrZSQLITE_DENYrTr:rZset_authorizerrr�r{)rr�r	r	r
�test_authorizer�s
z+UnhashableCallbacksTestCase.test_authorizerc	CszGdd�dt�}d}|�td��|j�|d|ddi��WdQRXd|}|�tj|��|j�d	|�WdQRXdS)
Nc@seZdZdZdS)z=UnhashableCallbacksTestCase.test_aggr.<locals>.UnhashableTypeN)r?r@rArr	r	r	r
�UnhashableType�sr��	aggr_namezunhashable typerZAggrr	zno such function: %szSELECT %s())�typerTr:rZcreate_aggregaterr*r)rr�r�r8r	r	r
�	test_aggr�s"z%UnhashableCallbacksTestCase.test_aggrN)
r?r@rA�__doc__rr
r�r�r�r�r	r	r	r
r��s
r�c@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�RecursiveUseOfCursorsz$Recursive use of cursors not allowedcCs@tjdtjd�|_|j��|_|j�d�|j�dddg�dS)Nz:memory:)rzcreate table test(x foo)zinsert into test(x) values (?))rf)Zbar)rrrrrrrr)rr	r	r
r�szRecursiveUseOfCursors.setUpcCs |j��|j��|`|`dS)N)rrr)rr	r	r
r
�s

zRecursiveUseOfCursors.tearDownc
sV�fdd�}t�tjd|i��.��tj�j���j�d�WdQRXWdQRXdS)Ncs�j��j�S)N)rrPr)r)rr	r
�<lambda>�rFzBRecursiveUseOfCursors.test_recursive_cursor_init.<locals>.<lambda>ZINITz#select x as "x [INIT]", x from test)	r�dictr�
convertersrTrRr8rr)r�convr	)rr
�test_recursive_cursor_init�sz0RecursiveUseOfCursors.test_recursive_cursor_initc
sV�fdd�}t�tjd|i��.��tj�j���j�d�WdQRXWdQRXdS)Ncs
�j��S)N)rr)r)rr	r
r��rFzCRecursiveUseOfCursors.test_recursive_cursor_close.<locals>.<lambda>ZCLOSEz$select x as "x [CLOSE]", x from test)	rr�rr�rTrRr8rr)rr�r	)rr
�test_recursive_cursor_close�sz1RecursiveUseOfCursors.test_recursive_cursor_closec
sdgf�fdd�	}t�tjd|i��8�j�d���tj�j���j�	�WdQRXWdQRXdS)Ncs|r�j��S|�d�S)N)rr6r$)r�l)rr	r
r��rFzCRecursiveUseOfCursors.test_recursive_cursor_fetch.<locals>.<lambda>ZITERz#select x as "x [ITER]", x from test)
rr�rr�rrrTrRr8rS)rr�r	)rr
�test_recursive_cursor_fetch�s
z1RecursiveUseOfCursors.test_recursive_cursor_fetchN)	r?r@rAr8rr
r�r�r�r	r	r	r
r��sr�cCs(t�td�}t�|t�t�t�t�f�S)NZCheck)ryZ	makeSuiterZ	TestSuiter�r�)Zregression_suiter	r	r
�suite�s
r�cCst��}|�t��dS)N)ryZTextTestRunner�runr�)Zrunnerr	r	r
�test�sr��__main__)r0ryZsqlite3rrtr�rZ
unittest.mockrZTestCaserrzr�r�r�r?r	r	r	r
�<module>sg0&