U
    x^                     @   s   d dl mZ d dl mZ d dlmZ d dlmZ d dlmZ ddl mZ ddl m	Z	 dd	l m
Z
 dd
l mZ ddl mZ G dd dejZdS )   )config)fixtures)eq_)Column)Table   )
ForeignKey)Integer)select)String)testingc                   @   s   e Zd ZdZdZdZdZedd Zedd Z	dd	 Z
d
d Zdd Zejjejjdd Zejjejjdd Zejjdd ZdS )CTETestT)ZctesZeachc              	   C   s\   t d|tdtddtdtdtdtd t d	|tdtddtdtdtdt d S )
N
some_tableidT)Zprimary_keydata2   	parent_idzsome_table.idsome_other_table)r   r   r	   r   r   )clsmetadata r   I/tmp/pip-install-dq5v43_d/SQLAlchemy/sqlalchemy/testing/suite/test_cte.pydefine_tables   s    zCTETest.define_tablesc                 C   sL   t j| jj ddd ddddddddddd	ddd
dddg d S )N   d1)r   r   r   r   d2r   d3   d4   d5)r   dbexecutetablesr   insert)r   r   r   r   insert_data&   s    





zCTETest.insert_datac              	   C   s   | j j}tj d}t|g|jj	dddg
d}|t|jjg|jj	ddg}t| dg W 5 Q R X d S )Nr   r   r   some_cter    r   )r#   r   r   r!   connectr
   wherecr   in_cter"   r   fetchall)selfr   connr,   resultr   r   r   #test_select_nonrecursive_round_trip3   s    
 z+CTETest.test_select_nonrecursive_round_tripc              	   C   s   | j j}tj }t|g|jj	dddgj
ddd}|d}| }|t|g|jj|jjk}|t|jjg|jjdk|jj }t| dd	d	d
d
d
g W 5 Q R X d S )Nr   r   r   r&   T)	recursiveZc1r'   )r   )r   )r#   r   r   r!   r(   r
   r)   r*   r   r+   r,   aliasZ	union_allr   r   r"   order_bydescr   r-   )r.   r   r/   r,   Z	cte_aliasZst1r0   r   r   r    test_select_recursive_round_tripA   s2    
 


z(CTETest.test_select_recursive_round_tripc              	   C   s   | j j}| j j}tj x}t|g|jj	
dddgd}|| dddgt|g t|t|g|jj dd	d
g W 5 Q R X d S )Nr   r   r   r&   r   r   r   )r   r   r   )r   r   r   )r   r   r   )r#   r   r   r   r!   r(   r
   r)   r*   r   r+   r,   r"   r$   from_selectr   r4   r   r-   r.   r   r   r/   r,   r   r   r   "test_insert_from_select_round_trip\   s*    
 z*CTETest.test_insert_from_select_round_tripc              	   C   s   | j j}| j j}tj }|| dddgt	|g t	|g
|jjdddgd}|| jdd	
|jj|jjk t|t	|g|jj d
ddddg W 5 Q R X d S )Nr   r   r   r   r   r   r&   r   )r   r   r   N)r   r   r   )r   r   r   )r   r   r   r   r    r   )r#   r   r   r   r!   r(   r"   r$   r7   r
   r)   r*   r   r+   r,   updatevaluesr   r4   r   r-   r8   r   r   r   test_update_from_round_tripr   sB     
z#CTETest.test_update_from_round_tripc              	   C   s   | j j}| j j}tj }|| dddgt	|g t	|g
|jjdddgd}|| 
|jj|jjk t|t	|g|jj dd	g W 5 Q R X d S 
Nr   r   r   r   r   r   r&   r:   r;   )r#   r   r   r   r!   r(   r"   r$   r7   r
   r)   r*   r   r+   r,   deleter   r4   r   r-   r8   r   r   r   test_delete_from_round_trip   s4     
z#CTETest.test_delete_from_round_tripc              
   C   s   | j j}| j j}tj }|| dddgt	|g t	|g
|jjdddgd}|| 
|jjt	|jjg
|jj|jjkk t|t	|g|jj dd	g W 5 Q R X d S r?   )r#   r   r   r   r!   r(   r"   r$   r7   r
   r)   r*   r   r+   r,   r@   r   r   r4   r-   r8   r   r   r   "test_delete_scalar_subq_round_trip   s<     
z*CTETest.test_delete_scalar_subq_round_tripN)__name__
__module____qualname__Z__backend____requires__Zrun_insertsZrun_deletesclassmethodr   r%   r1   r6   r9   r   requiresZctes_with_update_deleteZupdate_fromr>   Zdelete_fromrA   rB   r   r   r   r   r      s&   

"r   N) r   r   Z
assertionsr   Zschemar   r   r   r	   r
   r   r   Z
TablesTestr   r   r   r   r   <module>   s   