o
     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)ctes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)primary_keydata2   	parent_idzsome_table.idsome_other_table)r   r   r	   r   r   )clsmetadata r   T/var/www/html/venv/lib/python3.10/site-packages/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   sd   | j j}t||jjg dd}|t|jj|jjddg}t	|
 dg d S )Nr    r!   r#   some_cter#   r%   r#   )r'   r   r
   wherecr   in_cter&   r   fetchall)selfr)   r   r1   resultr   r   r   #test_select_nonrecursive_round_trip<   s   z+CTETest.test_select_nonrecursive_round_tripc                 C   s   | j j}t||jjg djddd}|d}| }|	t||jj
|jjk}|t|jj|jjdk|jj }t| g d d S )Nr+   r,   T)	recursivec1r    )r-   r!   r8   r   r9   r9   )r'   r   r
   r.   r/   r   r0   r1   alias	union_allr   r   r&   order_bydescr   r2   )r3   r)   r   r1   	cte_aliasst1r4   r   r   r    test_select_recursive_round_tripI   s(   

z(CTETest.test_select_recursive_round_tripc                 C   sz   | j j}| j j}t||jjg dd}|	|
 g dt| t|	t||jj g d d S )Nr+   r,   r   ))r   r    r   )r   r!   r   )r"   r#   r   )r'   r   r   r
   r.   r/   r   r0   r1   r&   r(   from_selectr   r<   r   r2   r3   r)   r   r   r1   r   r   r   "test_insert_from_select_round_tripc   s$   z*CTETest.test_insert_from_select_round_tripc                 C   s   | j j}| j j}|| g dt| t||jj	
g dd}|| jdd|jj	|jj	k t|t||jj g d d S )Nr   r+   r,   r$   )r   )r   r   N)r   r    r$   )r   r!   r$   )r"   r#   r$   r$   r%   r   )r'   r   r   r&   r(   rA   r
   r.   r/   r   r0   r1   updater   r   r<   r   r2   rB   r   r   r   test_update_from_round_tripx   s0   z#CTETest.test_update_from_round_tripc                 C   s   | j j}| j j}|| g dt| t||jj	
g dd}|| |jj	|jj	k t|t||jj ddg d S Nr   r+   r,   rD   rE   )r'   r   r   r&   r(   rA   r
   r.   r/   r   r0   r1   deleter   r<   r   r2   rB   r   r   r   test_delete_from_round_trip   s.   z#CTETest.test_delete_from_round_tripc              	   C   s   | j j}| j j}|| g dt| t||jj	
g dd}|| |jj	t|jj	|jj|jjk k t|t||jj ddg d S rH   )r'   r   r   r&   r(   rA   r
   r.   r/   r   r0   r1   rI   r   scalar_subqueryr   r<   r2   rB   r   r   r   "test_delete_scalar_subq_round_trip   s6   
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 )Ncol1col2z	some name)rO   name)ar   )br   cte1)r   r   r   r	   boolr   r1   r
   r&   allr   )r3   r)   rM   rN   rO   rU   stmtrowsr   r   r   test_values_named_via_cte   s   	

z!CTETest.test_values_named_via_cteN)__name__
__module____qualname____backend____requires__run_insertsrun_deletesclassmethodr   r*   r5   r@   rC   r   requiresctes_with_update_deleteupdate_fromrG   delete_fromrJ   rL   	variationctes_with_valuesrZ   r   r   r   r   r      s2    

!
r   N) r   
assertionsr   schemar   r   r   r   r	   r
   r   r   r   
TablesTestr   r   r   r   r   <module>   s   