U
    ovg3                     @   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 G dd dejZdS )   )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   E/tmp/pip-unpacked-wheel-uqd9otp_/sqlalchemy/testing/suite/test_cte.pydefine_tables   s    zCTETest.define_tablesc                 C   sJ   | | 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)executetablesr   insert)r   
connectionr   r   r   insert_data-   s    





zCTETest.insert_datac                 C   sf   | j j}t||jjdddgd}|t|jj|jjddg}t	|
 dg d S )Nr   r   r   some_cter   r   )r!   r   r	   wherecr   in_cter    r   fetchall)selfr#   r   r*   resultr   r   r   #test_select_nonrecursive_round_trip:   s    z+CTETest.test_select_nonrecursive_round_tripc                 C   s   | j j}t||jjdddgjddd}|d}| }|	t||jj
|jjk}|t|jj|jjdk|jj }t| dd	d	d
d
d
g d S )Nr   r   r   r%   T)	recursiveZc1r&   )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st1r-   r   r   r    test_select_recursive_round_tripG   s0     


z(CTETest.test_select_recursive_round_tripc                 C   s   | j j}| j j}t||jjdddgd}|	|
 dddgt| t|	t||jj dd	d
g 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"   from_selectr   r1   r   r+   r,   r#   r   r   r*   r   r   r   "test_insert_from_select_round_tripa   s(     z*CTETest.test_insert_from_select_round_tripc                 C   s   | j j}| j j}|| dddgt| t||jj	
dddgd}|| jdd	|jj	|jj	k t|t||jj d
ddddg 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"   r4   r	   r'   r(   r   r)   r*   updatevaluesr   r1   r   r+   r5   r   r   r   test_update_from_round_tripv   s@     z#CTETest.test_update_from_round_tripc                 C   s   | j j}| j j}|| dddgt| t||jj	
dddgd}|| |jj	|jj	k t|t||jj dd	g d S 
Nr   r   r   r   r   r   r%   r7   r8   )r!   r   r   r    r"   r4   r	   r'   r(   r   r)   r*   deleter   r1   r   r+   r5   r   r   r   test_delete_from_round_trip   s2     z#CTETest.test_delete_from_round_tripc              	   C   s   | j j}| j j}|| dddgt| t||jj	
dddgd}|| |jj	t|jj	|jj|jjk k t|t||jj dd	g d S r<   )r!   r   r   r    r"   r4   r	   r'   r(   r   r)   r*   r=   r   Zscalar_subqueryr   r1   r+   r5   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$   r.   r3   r6   r   requiresZctes_with_update_deleteZupdate_fromr;   Zdelete_fromr>   r?   r   r   r   r   r      s&   

!r   N) r   Z
assertionsr   Zschemar   r   r   r   r	   r
   r   Z
TablesTestr   r   r   r   r   <module>	   s   