U
    h^                     @   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 ddl mZ G dd dejZdS )   )fixtures)eq_)Column)Table   )column)
ForeignKey)Integer)select)String)testing)valuesc                   @   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edddgedddgedddg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-y9ln43lq/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_tripI   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   r3   r   r-   r.   r%   r   r   r,   r   r   r   "test_insert_from_select_round_tripc   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$   r6   r
   r)   r*   r   r+   r,   updater   r   r3   r   r-   r7   r   r   r   test_update_from_round_tripx   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'   r9   r:   )r#   r   r   r"   r$   r6   r
   r)   r*   r   r+   r,   deleter   r3   r   r-   r7   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$   r6   r
   r)   r*   r   r+   r,   r>   r   Zscalar_subqueryr   r3   r-   r7   r   r   r   "test_delete_scalar_subq_round_trip   s:     z*CTETest.test_delete_scalar_subq_round_tripvalues_namedF	cte_namedliteral_bindsc                 C   sh   t tdttdtt||r dnd dddg|r:dnd }t|}||	 }t
|ddg d S )NZcol1Zcol2z	some name)rC   name)ar   )br   cte1)r   r   r   r	   boolr   r,   r
   r"   allr   )r.   r%   rA   rB   rC   rG   ZstmtZrowsr   r   r   test_values_named_via_cte   s    	

z!CTETest.test_values_named_via_cteN)__name__
__module____qualname__Z__backend____requires__Zrun_insertsZrun_deletesclassmethodr   r&   r0   r5   r8   r   requiresZctes_with_update_deleteZupdate_fromr<   Zdelete_fromr?   r@   Z	variationZctes_with_valuesrJ   r   r   r   r   r      s0   

!
r   N) r   Z
assertionsr   Zschemar   r   r   r   r	   r
   r   r   r   Z
TablesTestr   r   r   r   r   <module>	   s   