o
    GXh?                     @   sH   d dl Z d dlZG dd de jZdd Zdd Zedkr"e  dS dS )	    Nc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )	DumpTestsc                 C   s   t d| _| j | _d S )N:memory:)sqliteconnectcxcursorcuself r   ;/opt/python-3.10.19/usr/lib/python3.10/sqlite3/test/dump.pysetUp   s   zDumpTests.setUpc                 C   s   | j   d S N)r   closer	   r   r   r   tearDown   s   zDumpTests.tearDownc                    sd   g dfddD  j  }dd |D  dg dg  fddttD  d S )N)
z#CREATE TABLE "index"("index" blob);z"INSERT INTO "index" VALUES(X'01');z3CREATE TABLE "quoted""table"("quoted""field" text);z4INSERT INTO "quoted""table" VALUES('quoted''value');zCREATE TABLE t1(id integer primary key, s1 text, t1_i1 integer not null, i2 integer, unique (s1), constraint t1_idx1 unique (i2));z'INSERT INTO "t1" VALUES(1,'foo',10,20);z(INSERT INTO "t1" VALUES(2,'foo2',30,30);ztCREATE TABLE t2(id integer, t2_i1 integer, t2_i2 integer, primary key (id),foreign key(t2_i1) references t1(t1_i1));zrCREATE TRIGGER trigger_1 update of t1_i1 on t1 begin update t2 set t2_i1 = new.t1_i1 where t2_i1 = old.t1_i1; end;z;CREATE VIEW v1 as select * from t1 left join t2 using (id);c                    s   g | ]} j |qS r   )r   execute.0sr	   r   r   
<listcomp>-   s    z-DumpTests.test_table_dump.<locals>.<listcomp>c                 S      g | ]}|qS r   r   r   r   r   r   r   /       BEGIN TRANSACTION;COMMIT;c                    s    g | ]} |  | qS r   )assertEqual)r   iZactual_sqlsZexpected_sqlsr
   r   r   r   2   s    )r   iterdumprangelen)r
   r   r   r   r   test_table_dump   s   


zDumpTests.test_table_dumpc                 C   sl   g d}| j d| |d dd|d< |dd |g d d	d
 | j D }| || d S )N)z9CREATE TABLE "t1" (id integer primary key autoincrement);zINSERT INTO "t1" VALUES(NULL);z9CREATE TABLE "t2" (id integer primary key autoincrement);    ZNULL1r   r   )zDELETE FROM "sqlite_sequence";z-INSERT INTO "sqlite_sequence" VALUES('t1',1);r   c                 S   r   r   r   )r   Zstmtr   r   r   r   F   r   z5DumpTests.test_dump_autoincrement.<locals>.<listcomp>)	r   executescriptjoinreplaceinsertextendr   r   r   )r
   expectedactualr   r   r   test_dump_autoincrement5   s   z!DumpTests.test_dump_autoincrementc           	   	   C   s   | j d | j d | j d | j ddd tdD  | j dd	d td
D  | j  td}d| j	 }|
| | }d}|D ]0\}}| j||d |d|f}| }| |d d | W d    n1 sxw   Y  qMd S )NzBEGIN TRANSACTIONz6CREATE TABLE t1 (id integer primary key autoincrement)z6CREATE TABLE t2 (id integer primary key autoincrement)zINSERT INTO t1 VALUES(?)c                 s       | ]}d V  qdS r   Nr   r   _r   r   r   	<genexpr>M       zBDumpTests.test_dump_autoincrement_create_new_db.<locals>.<genexpr>	   zINSERT INTO t2 VALUES(?)c                 s   r,   r-   r   r.   r   r   r   r0   N   r1      r   r!   ))t1r2   )t2r3   )tableseqz[
                    SELECT "seq" FROM "sqlite_sequence" WHERE "name" == ?
                r   )r   r   Zexecutemanyr   r   Zcommitr   r   r%   r   r$   r   ZsubTestZfetchallr   )	r
   Zcx2queryZcu2Zdatasetr6   r7   resZrowsr   r   r   %test_dump_autoincrement_create_new_dbI   s*   


z/DumpTests.test_dump_autoincrement_create_new_dbc                 C   s`   G dd d}|| j _d}d}d||dg}| j| | j| t| j  }| || d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z6DumpTests.test_unorderable_row.<locals>.UnorderableRowc                 S   s
   || _ d S r   row)r
   r   r<   r   r   r   __init__e      
z?DumpTests.test_unorderable_row.<locals>.UnorderableRow.__init__c                 S   s
   | j | S r   r;   )r
   indexr   r   r   __getitem__g   r>   zBDumpTests.test_unorderable_row.<locals>.UnorderableRow.__getitem__N)__name__
__module____qualname__r=   r@   r   r   r   r   UnorderableRowd   s    rD   zCREATE TABLE "alpha" ("one");zCREATE TABLE "beta" ("two");r   r   )r   Zrow_factoryr   r   listr   r   )r
   rD   ZCREATE_ALPHAZCREATE_BETAr)   Zgotr   r   r   test_unorderable_rowb   s   zDumpTests.test_unorderable_rowN)	rA   rB   rC   r   r   r    r+   r:   rF   r   r   r   r   r      s    &r   c                  C   s   t g} tdd | D S )Nc                 S   s   g | ]	}t  |qS r   )unittestZ
TestLoaderZloadTestsFromTestCase)r   tr   r   r   r   |   s    zsuite.<locals>.<listcomp>)r   rG   Z	TestSuite)Ztestsr   r   r   suitew   s
   rI   c                  C   s   t  } | t  d S r   )rG   ZTextTestRunnerrunrI   )Zrunnerr   r   r   test   s   rK   __main__)rG   Zsqlite3r   ZTestCaser   rI   rK   rA   r   r   r   r   <module>   s   p
