U
    x^r%                     @   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 ddl mZ G dd dejZG dd dejZG dd dejZdZdS )   )config)engines)fixtures)eq_)requirements)Column)Table   )Integer)literal)literal_column)select)Stringc                   @   sR   e Zd ZdZdZdZddiZedd Zdd	 Z	d
d Z
dd Zejdd ZdS )LastrowidTesteachT)Zimplements_get_lastrowidautoincrement_insertimplicit_returningFc              	   C   sL   t d|tdtdddtdtd t d|tdtddd	tdtd d S )
N
autoinc_pkidTprimary_keyZtest_needs_autoincrementdata2   	manual_pkFr   Zautoincrementr   r   r
   r   clsmetadata r   L/tmp/pip-install-dq5v43_d/SQLAlchemy/sqlalchemy/testing/suite/test_insert.pydefine_tables   s"       	zLastrowidTest.define_tablesc                 C   s*   | |  }t|tjjjdf d S N	some dataexecuter   firstr   r   dbdialectZdefault_sequence_baseselftableconnrowr   r   r    _assert_round_trip*   s    z LastrowidTest._assert_round_tripc                 C   s.   t jj| jj dd | | jjt j d S Nr#   r   r   r'   r%   tablesr   insertr.   r*   r   r   r    test_autoincrement_on_insert.   s    z*LastrowidTest.test_autoincrement_on_insertc                 C   sD   t jj| jj dd}t jt| jjjj	g}t
|j|g d S r/   r   r'   r%   r2   r   r3   scalarr   cr   r   inserted_primary_keyr*   rpkr   r   r    test_last_inserted_id3   s    
 z#LastrowidTest.test_last_inserted_idc                 C   sF   t jj| jj dd}|j}t jt| jjj	j
g}t|| d S r/   )r   r'   r%   r2   r   r3   	lastrowidr7   r   r8   r   r   )r*   r;   r>   r<   r   r   r    test_native_lastrowid_autoinc?   s    
 z+LastrowidTest.test_native_lastrowid_autoincN)__name__
__module____qualname__run_deletes__backend____requires____engine_options__classmethodr!   r.   r5   r=   r   Zdbapi_lastrowidr?   r   r   r   r    r      s   
r   c                   @   s|   e Zd ZdZdZedd Zdd Zej	dd Z
ejd	d
 Zejdd Zejdd Zejdd Zejdd ZdS )InsertBehaviorTestr   Tc                 C   s   t d|tdtdddtdtd t d|tdtddd	tdtd t d
|tdtdddtdtdtdtddtdttdtdtd d d S )Nr   r   Tr   r   r   r   Fr   includes_defaultsx   )defaulty2)type_r   )r   r   r
   r   r   r   r   r   r   r    r!   M   sD          z InsertBehaviorTest.define_tablesc                 C   sb   t jjrtjddid}ntj}|j| jj	
 dd}|js@t|jrJt|jsTt|jr^td S )Nr   F)optionsr#   r0   )r   	returningZenabledr   Ztesting_enginer   r'   r%   r2   r   r3   _soft_closedAssertionErrorclosed	is_insertreturns_rows)r*   enginer;   r   r   r    test_autoclose_on_insertl   s    


z+InsertBehaviorTest.test_autoclose_on_insertc                 C   sD   t jj| jj dd}|js"t|jr,t|j	s6t|j
r@td S r/   )r   r'   r%   r2   r   r3   rR   rS   rT   rU   rV   r*   r;   r   r   r    +test_autoclose_on_insert_implicit_returningz   s    
 


z>InsertBehaviorTest.test_autoclose_on_insert_implicit_returningc                 C   sb   t j| jj }|jst|jr(tt j| jj	 
| jjjjd k}t| s^td S )N)r   r'   r%   r2   r   r3   rR   rS   rT   r   wherer8   r   lenfetchallrY   r   r   r    test_empty_insert   s    

z$InsertBehaviorTest.test_empty_insertc                 C   s   | j j}| j j}tj| tdddtdddtdddg tj| dt	|j
jg|j
jddg}t|jd g tjt	|j
jg|j
j}t| d	d
g d S )N   data1r   r   r   data2r	   data3r0   rb   rc   )r2   r   r   r   r'   r%   r3   dictfrom_selectr   r8   r   r[   in_r   r9   order_byr]   r*   Z	src_tableZ
dest_tableresultr   r   r    test_insert_from_select_autoinc   s,    


		z2InsertBehaviorTest.test_insert_from_select_autoincc                 C   s   | j j}| j j}tj| dt|j	j
g|j	j
ddg}t|jd g tjt|j	j
g|j	j
}t| g  d S )Nr0   rb   rc   )r2   r   r   r   r'   r%   r3   rg   r   r8   r   r[   rh   r   r9   ri   r]   rj   r   r   r    'test_insert_from_select_autoinc_no_rows   s    z:InsertBehaviorTest.test_insert_from_select_autoinc_no_rowsc                 C   s   | j j}tj| tdddtdddtdddg tj|jdd	dt|j	j
d
 |j	jg|j	jddg ttjt|j	jg|j	j dddddg d S )Nr_   r`   ra   r   rb   r	   rc   TinlinerK   )r`   rd   re   )r2   r   r   r'   r%   r3   rf   rg   r   r8   r   r   r[   rh   r   ri   r]   r*   r+   r   r   r    test_insert_from_select   s,    


		z*InsertBehaviorTest.test_insert_from_selectc                 C   s   | j j}tj| tdddtdddtdddg tj|jdd	dt|j	j
d
 |j	jg|j	jddg ttjt|g|j	j|j	j
 dddddg d S )Nr_   r`   ra   r   rb   r	   rc   Trn   rK   )r_   r`   rK      )r   rb   rK   rr   )   rb   rK   rr   )r	   rc   rK   rr   )   rc   rK   rr   )r2   rI   r   r'   r%   r3   rf   rg   r   r8   r   r   r[   rh   r   ri   r]   rp   r   r   r    %test_insert_from_select_with_defaults   s6    


		z8InsertBehaviorTest.test_insert_from_select_with_defaultsN)r@   rA   rB   rC   rD   rG   r!   rX   r   rQ   rZ   Zempty_insertsr^   Zinsert_from_selectrl   rm   rq   ru   r   r   r   r    rH   I   s"   

	



rH   c                   @   sZ   e Zd ZdZdZdZddiZdd Zedd Z	e
jd	d
 Zdd Zdd Zdd ZdS )ReturningTestr   )rQ   r   Tr   c                 C   s*   | |  }t|tjjjdf d S r"   r$   r)   r   r   r    r.   
  s    z ReturningTest._assert_round_tripc              	   C   s(   t d|tdtdddtdtd d S )Nr   r   Tr   r   r   r   r   r   r   r    r!     s       zReturningTest.define_tablesc                 C   sZ   t j}| jj}|j| |jjdd}|	 d }t j
t|jjg}t|| d S Nr#   r0       )r   r'   r2   r   r%   r3   rQ   r8   r   r&   r7   r   r   )r*   rW   r+   r;   r<   
fetched_pkr   r   r    %test_explicit_returning_pk_autocommit  s     z3ReturningTest.test_explicit_returning_pk_autocommitc              	   C   sn   t j}| jj}| .}|j| |jj	dd}|
 d }W 5 Q R X t jt|jj	g}t|| d S rw   )r   r'   r2   r   beginr%   r3   rQ   r8   r   r&   r7   r   r   )r*   rW   r+   r,   r;   r<   ry   r   r   r    (test_explicit_returning_pk_no_autocommit$  s    
 z6ReturningTest.test_explicit_returning_pk_no_autocommitc                 C   s.   t jj| jj dd | | jjt j d S r/   r1   r4   r   r   r    /test_autoincrement_on_insert_implicit_returning/  s    z=ReturningTest.test_autoincrement_on_insert_implicit_returningc                 C   sD   t jj| jj dd}t jt| jjjj	g}t
|j|g d S r/   r6   r:   r   r   r    (test_last_inserted_id_implicit_returning4  s    
 z6ReturningTest.test_last_inserted_id_implicit_returningN)r@   rA   rB   Zrun_create_tablesrE   rD   rF   r.   rG   r!   r   Zfetch_rows_post_commitrz   r|   r}   r~   r   r   r   r    rv     s   



rv   )r   rH   rv   N) r   r   r   Z
assertionsr   r   Zschemar   r   r
   r   r   r   r   Z
TablesTestr   rH   rv   __all__r   r   r   r    <module>   s    : ;: