
    ؄_9_                     |   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 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ej                  Z G d dej                  Z G d dej                  Z G d  d!ej                  Z G d" d#ej                  Z  G d$ d%ej                  Z! G d& d'ej                  Z" G d( d)ej                  Z# G d* d+ej                  Z$d,S )-   )config)fixtures)eq_)in_)Column)Table   )	bindparam)case)Computed)exists)false)func)Integer)literal)literal_column)null)select)String)testing)text)true)tuple_)union)utilc                   n    e Zd ZdZed             Zed             Zd Zej	        j
        d             ZdS )CollateTestTc                     t          d|t          dt          d          t          dt          d                               d S )N
some_tableidTprimary_keydatad   r   r   r   r   clsmetadatas     i/var/www/book.euthymeo.com/html/venv/lib/python3.11/site-packages/sqlalchemy/testing/suite/test_select.pydefine_tableszCollateTest.define_tables   sI    4d33366#;;''		
 	
 	
 	
 	
    c                 z    |                     | j        j                                        ddddddg           d S )N   collate data1r    r#   r   collate data2executetablesr   insertr'   
connections     r)   insert_datazCollateTest.insert_data'   sS    J!((**/22/22	
 	
 	
 	
 	
r+   c                     t          t          j                            |                                          |           d S Nr   r   dbr2   fetchallselfr   results      r)   _assert_resultzCollateTest._assert_result1   4    FIf%%..00&99999r+   c                 P   t           j                            t           j                  }|                     t          | j        j        g                              | j        j        j	        j
                            |                                                    ddg           d S )N)r-   r.   )r   r0   )r   requiresget_order_by_collationr   r@   r   r3   r   order_bycr#   collateasc)r>   	collations     r)   test_collate_order_byz!CollateTest.test_collate_order_by4   s    $;;GNKK	DK*+,,55&(-55i@@DDFF  "#78		
 	
 	
 	
 	
r+   N)__name__
__module____qualname____backend__classmethodr*   r7   r@   r   rC   order_by_collationrJ    r+   r)   r   r      s~        K
 
 [
 
 
 [
: : : (
 
 )(
 
 
r+   r   c                       e Zd ZdZdZed             Zed             Zd Zd Z	d Z
d Zd	 Zd
 Zej        j        d             ZdS )OrderByLabelTestzTest the dialect sends appropriate ORDER BY expressions when
    labels are used.

    This essentially exercises the "supports_simple_order_by_label"
    setting.

    Tc                    t          d|t          dt          d          t          dt                    t          dt                    t          dt          d                    t          d	t          d                               d S )
Nr   r    Tr!   xyq2   pr%   r&   s     r)   r*   zOrderByLabelTest.define_tablesK   sv    4d3333  3  3r

##3r

##	
 	
 	
 	
 	
r+   c                     |                     | j        j                                        ddddddddddddddd	d
ddg           d S )Nr-   r   q1p3)r    rU   rV   rW   rY   r	   q2p2   q3p1r1   r5   s     r)   r7   zOrderByLabelTest.insert_dataW   sp    J!((**qqt$??qqt$??qqt$??	
 	
 	
 	
 	
r+   c                     t          t          j                            |                                          |           d S r9   r:   r=   s      r)   r@   zOrderByLabelTest._assert_resultb   rA   r+   c                     | j         j        }|j        j                            d          }|                     t          |g                              |          g d           d S )Nlx)r-   r   r	   )r3   r   rF   rU   labelr@   r   rE   r>   tablerd   s      r)   
test_plainzOrderByLabelTest.test_plaine   sZ    &WY__T""FB4LL11"557I7I7IJJJJJr+   c                     | j         j        }|j        j        |j        j        z                       d          }|                     t          |g                              |          g d           d S )Nrd   )rg         )	r3   r   rF   rU   rV   rh   r@   r   rE   ri   s      r)   test_composed_intz"OrderByLabelTest.test_composed_intj   se    &gi%')#**400FB4LL11"557I7I7IJJJJJr+   c           	         | j         j        }|j        j        |j        j        z                       d          }t          j        |j        j                  |j        j	        z                       d          }| 
                    t          ||g                              ||                                          dt          j        d          fdt          j        d          fdt          j        d          fg           d S )	Nrd   lyr	   q1p3rn   q2p2rp   q3p1)r3   r   rF   rU   rV   rh   r   lowerrW   rY   r@   r   rE   descr   u)r>   rj   rd   rs   s       r)   test_composed_multiplez'OrderByLabelTest.test_composed_multipleo   s    &gi%')#**400j##egi/66t<<B8%%b"''))44 1dfVnn"546&>>7JK	
 	
 	
 	
 	
r+   c                     | j         j        }|j        j                            d          }|                     t          |g                              |                                          g d           d S )Nrd   )rg   rf   re   )	r3   r   rF   rU   rh   r@   r   rE   rx   ri   s      r)   test_plain_descz OrderByLabelTest.test_plain_descx   sm    &WY__T""B4LL!!"'')),,.@.@.@	
 	
 	
 	
 	
r+   c                    | j         j        }|j        j        |j        j        z                       d          }|                     t          |g                              |	                                          g d           d S )Nrd   )ro   rm   rg   )
r3   r   rF   rU   rV   rh   r@   r   rE   rx   ri   s      r)   test_composed_int_descz'OrderByLabelTest.test_composed_int_desc   sx    &gi%')#**400B4LL!!"'')),,.@.@.@	
 	
 	
 	
 	
r+   c                 L   | j         j        }|j        j        |j        j        z                       d          }t          t          j        |j        j	                  |g          
                    |                              |          }|                     |g d           d S )Nrd   ))r-   r	   )r-   rn   )r-   rp   )r3   r   rF   rU   rV   rh   r   r   countr    group_byrE   r@   )r>   rj   exprstmts       r)   test_group_by_composedz'OrderByLabelTest.test_group_by_composed   s    &	EGI%,,T22DJuwz**D122Xd^^Xd^^ 	
 	D":":":;;;;;r+   N)rK   rL   rM   __doc__rN   rO   r*   r7   r@   rk   rq   rz   r|   r~   r   rC   group_by_complex_expressionr   rQ   r+   r)   rS   rS   @   s          K	
 	
 [	
 
 
 [
: : :K K K
K K K

 
 

 
 

 
 
 1< < 21< < <r+   rS   c                   H   e Zd ZdZed             Zed             ZddZd Ze	j
        j        d             Ze	j
        j        d             Ze	j
        j        d	             Ze	j
        j        d
             Ze	j
        j        d             Ze	j
        j        d             ZdS )LimitOffsetTestTc           
          t          d|t          dt          d          t          dt                    t          dt                               d S Nr   r    Tr!   rU   rV   r   r   r   r&   s     r)   r*   zLimitOffsetTest.define_tables   P    4d3333  3  	
 	
 	
 	
 	
r+   c           
          |                     | j        j                                        ddddddddddddddddg           d S Nr-   r   )r    rU   rV   r	   r_   rn   r1   r5   s     r)   r7   zLimitOffsetTest.insert_data   q    J!((**qq))qq))qq))qq))		
 	
 	
 	
 	
r+   rQ   c                     t          t          j                            ||                                          |           d S r9   r:   r>   r   r?   paramss       r)   r@   zLimitOffsetTest._assert_result   6    FIff--6688&AAAAAr+   c                     | j         j        }|                     t          |g                              |j        j                                      d          ddg           d S )Nr   r-   r-   r   r   r   r	   )r3   r   r@   r   rE   rF   r    limitr>   rj   s     r)   test_simple_limitz!LimitOffsetTest.test_simple_limit   sa    &E7OO$$UWZ0066q99	"	
 	
 	
 	
 	
r+   c                     | j         j        }|                     t          |g                              |j        j                                      d          ddg           d S )Nr   r	   r	   r_   r_   r_   rn   )r3   r   r@   r   rE   rF   r    offsetr   s     r)   test_simple_offsetz"LimitOffsetTest.test_simple_offset   sa    &E7OO$$UWZ0077::	"	
 	
 	
 	
 	
r+   c                     | j         j        }|                     t          |g                              |j        j                                      d                              d          ddg           d S )Nr   r-   r   r   )	r3   r   r@   r   rE   rF   r    r   r   r   s     r)   test_simple_limit_offsetz(LimitOffsetTest.test_simple_limit_offset   so    &E7OO$$UWZ0066q99@@CC	"	
 	
 	
 	
 	
r+   c                 b   | j         j        }t          |g                              |j        j                                      d                              d          }|                    t          j
        j        ddi          }t          |          }|                     |ddg           dS )	z7test that 'literal binds' mode works - no bound params.r   r-   literal_bindsT)dialectcompile_kwargsr   r   N)r3   r   r   rE   rF   r    r   r   compiler   r;   r   strr@   )r>   rj   r   sqls       r)   test_limit_offset_nobindsz)LimitOffsetTest.test_limit_offset_nobinds   s     &ug''
3399!<<CCAFFllI%6M  
 
 #hhC)Y!788888r+   c                     | j         j        }|                     t          |g                              |j        j                                      t          d                    ddgddi           d S )Nlr   r   r   r   )	r3   r   r@   r   rE   rF   r    r   r
   r   s     r)   test_bound_limitz LimitOffsetTest.test_bound_limit   ss    &E7OO$$UWZ0066y~~FF	"8 	 	
 	
 	
 	
 	
r+   c                     | j         j        }|                     t          |g                              |j        j                                      t          d                    ddgddi           d S )Nor   r   r   r   )	r3   r   r@   r   rE   rF   r    r   r
   r   s     r)   test_bound_offsetz!LimitOffsetTest.test_bound_offset   ss    &E7OO$$UWZ0077	#GG	"8 	 	
 	
 	
 	
 	
r+   c                 .   | j         j        }|                     t          |g                              |j        j                                      t          d                    	                    t          d                    ddgddd           d S )	Nr   r   r   r   r   r-   )r   r   r   )
r3   r   r@   r   rE   rF   r    r   r
   r   r   s     r)   test_bound_limit_offsetz'LimitOffsetTest.test_bound_limit_offset   s    &E7OOXegj!!U9S>>""VIcNN##	"## 	 	
 	
 	
 	
 	
r+   NrQ   )rK   rL   rM   rN   rO   r*   r7   r@   r   r   rC   r   r   r   r   bound_limit_offsetr   r   r   rQ   r+   r)   r   r      s@       K
 
 [
 	
 	
 [	
B B B B
 
 
 
 
 
 
 
 
 
9 
9 
9 (
 
 )(
 (
 
 )(
 (	
 	
 )(	
 	
 	
r+   r   c                       e Zd ZdZed             Zed             ZddZd Zd Z	e
j        j        e
j        j        d                         Ze
j        j        d	             Zd
 Ze
j        j        d             Zd ZdS )CompoundSelectTestTc           
          t          d|t          dt          d          t          dt                    t          dt                               d S r   r   r&   s     r)   r*   z CompoundSelectTest.define_tables   r   r+   c           
          |                     | j        j                                        ddddddddddddddddg           d S r   r1   r5   s     r)   r7   zCompoundSelectTest.insert_data   r   r+   rQ   c                     t          t          j                            ||                                          |           d S r9   r:   r   s       r)   r@   z!CompoundSelectTest._assert_result
  r   r+   c                 l   | j         j        }t          |g                              |j        j        dk              }t          |g                              |j        j        dk              }t          ||          }|                     |                    |j        j                  ddg           d S Nr   r	   r   r   )	r3   r   r   whererF   r    r   r@   rE   r>   rj   s1s2u1s        r)   test_plain_unionz#CompoundSelectTest.test_plain_union  s    &UG__""57:?33UG__""57:?332r]]BKK009i2HIIIIIr+   c                    | j         j        }t          |g                              |j        j        dk              }t          |g                              |j        j        dk              }t          ||                                                                          }|                     |	                    |j        j                  ddg           d S r   )
r3   r   r   r   rF   r    r   aliasr@   rE   r   s        r)   test_select_from_plain_unionz/CompoundSelectTest.test_select_from_plain_union  s    &UG__""57:?33UG__""57:?332r]]  ""))++BKK009i2HIIIIIr+   c                 R   | j         j        }t          |g                              |j        j        dk                                  d                              |j        j                  }t          |g                              |j        j        dk                                  d                              |j        j                  }t          ||                              d          }| 	                    |                    |j        j                  ddg           d S Nr   r-   r	   r   r   )
r3   r   r   r   rF   r    r   rE   r   r@   r   s        r)   &test_limit_offset_selectable_in_unionsz9CompoundSelectTest.test_limit_offset_selectable_in_unions  s     &E7OOU57:?##U1XXXegj!!	 	 E7OOU57:?##U1XXXegj!!	 	 2r]]  ##BKK009i2HIIIIIr+   c                    | j         j        }t          |g                              |j        j        dk                                  |j        j                  }t          |g                              |j        j        dk                                  |j        j                  }t          ||                              d          }| 	                    |                    |j        j                  ddg           d S r   )
r3   r   r   r   rF   r    rE   r   r   r@   r   s        r)   "test_order_by_selectable_in_unionsz5CompoundSelectTest.test_order_by_selectable_in_unions1  s    &UG__""57:?33<<UWZHHUG__""57:?33<<UWZHH2r]]  ##BKK009i2HIIIIIr+   c                    | j         j        }t          |g                              |j        j        dk                                              }t          |g                              |j        j        dk                                              }t          ||                              d          }| 	                    |
                    |j        j                  ddg           d S r   )r3   r   r   r   rF   r    distinctr   r   r@   rE   r   s        r)   "test_distinct_selectable_in_unionsz5CompoundSelectTest.test_distinct_selectable_in_unions:  s    &UG__""57:?33<<>>UG__""57:?33<<>>2r]]  ##BKK009i2HIIIIIr+   c                    | j         j        }t          |g                              |j        j        dk                                  d                              |j        j                  }t          |g                              |j        j        dk                                  d                              |j        j                  }t          ||          	                                }| 
                    |                                                    d                              |j        j                  ddg           d S r   )r3   r   r   r   rF   r    r   rE   r   r   r@   r   s        r)   &test_limit_offset_in_unions_from_aliasz9CompoundSelectTest.test_limit_offset_in_unions_from_aliasB  s    &E7OOU57:?##U1XXXegj!!	 	 E7OOU57:?##U1XXXegj!!	 	 2r]]  ""IIKKa  ))"$'22Y	4J	
 	
 	
 	
 	
r+   c                    | j         j        }t          |g                              |j        j        dk                                  d                              |j        j                                                                                  }t          |g                              |j        j        dk                                  d                              |j        j                                                                                  }t          ||                              d          }| 
                    |                    |j        j                  ddg           d S r   )r3   r   r   r   rF   r    r   rE   r   r   r@   r   s        r)   .test_limit_offset_aliased_selectable_in_unionszACompoundSelectTest.test_limit_offset_aliased_selectable_in_unionsX  s   &E7OOU57:?##U1XXXegj!!UWWVXX 	 E7OOU57:?##U1XXXegj!!UWWVXX 	 2r]]  ##BKK009i2HIIIIIr+   Nr   )rK   rL   rM   rN   rO   r*   r7   r@   r   r   r   rC   order_by_col_from_union/parens_in_union_contained_select_w_limit_offsetr   0parens_in_union_contained_select_wo_limit_offsetr   r   r   r   rQ   r+   r)   r   r      s/       K
 
 [
 	
 	
 [	
B B B BJ J JJ J J -EJ J FE .-J$ FJ J GFJJ J J E
 
 FE
*J J J J Jr+   r   c                      e Zd ZdZed             Zed             ZddZd Ze	j
        j        d             Ze	j
        j        d             Zd	 Ze	j
        j        d
             Ze	j
        j        d             Zd Zd Zd Zd Zd ZdS )ExpandingBoundInTestTc                     t          d|t          dt          d          t          dt                    t          dt                    t          dt          d                               d S )	Nr   r    Tr!   rU   rV   zrX   r%   r&   s     r)   r*   z"ExpandingBoundInTest.define_tablesr  sc    4d3333  3  3r

##	
 	
 	
 	
 	
r+   c                     |                     | 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 )Nr-   r   z1)r    rU   rV   r   r	   z2r_   z3rn   z4r1   r5   s     r)   r7   z ExpandingBoundInTest.insert_data}  sy    J!((**qqt44qqt44qqt44qqt44		
 	
 	
 	
 	
r+   rQ   c                     t          t          j                            ||                                          |           d S r9   r:   r   s       r)   r@   z#ExpandingBoundInTest._assert_result  r   r+   c                    | j         j        }t          |j        j        g                              |j        j                            t          dd                                                  |j        j	                            t          dd                              
                    |j        j                  }|                     |g g g d           d S )NrW   T	expandingrY   )rW   rY   r   )r3   r   r   rF   r    r   rU   r   r
   rV   rE   r@   r>   rj   r   s      r)   test_multiple_empty_setsz-ExpandingBoundInTest.test_multiple_empty_sets  s     & EGJ<  U579==3$!?!?!?@@AAU579==3$!?!?!?@@AAXegj!!	 	 	D"2B-?-?@@@@@r+   c                 n   | j         j        }t          |j        j        g                              t          |j        j        |j        j                  	                    t          dd                                                  |j        j                  }|                     |g dg i           d S NrW   Tr   r   r3   r   r   rF   r    r   r   rU   r   r   r
   rE   r@   r   s      r)   test_empty_heterogeneous_tuplesz4ExpandingBoundInTest.test_empty_heterogeneous_tuples      & EGJ<  Uuwy%'),,00cT222  
 Xegj!! 	 	D"c2Y77777r+   c                 n   | j         j        }t          |j        j        g                              t          |j        j        |j        j                  	                    t          dd                                                  |j        j                  }|                     |g dg i           d S r   r3   r   r   rF   r    r   r   rU   rV   r   r
   rE   r@   r   s      r)   test_empty_homogeneous_tuplesz2ExpandingBoundInTest.test_empty_homogeneous_tuples  r   r+   c                 F   | j         j        }t          |j        j        g                              |j        j                            t          dd                              	                    |j        j                  }| 
                    |g ddg di           d S )NrW   Tr   rf   rg   r_   )r   r	   r_   r   r3   r   r   rF   r    r   rU   r   r
   rE   r@   r   s      r)   test_bound_in_scalarz)ExpandingBoundInTest.test_bound_in_scalar  s    & EGJ<  U579==3$!?!?!?@@AAXegj!! 	 	D"4"4"4c999=MNNNNNr+   c                 v   | j         j        }t          |j        j        g                              t          |j        j        |j        j                  	                    t          dd                                                  |j        j                  }|                     |g ddg di           d S )NrW   Tr   r   ))r   r	   )r	   r_   )r_   rn   r   r   r   s      r)   test_bound_in_two_tuplez,ExpandingBoundInTest.test_bound_in_two_tuple  s    & EGJ<  Uuwy%'),,00cT222  
 Xegj!! 	 	$$$c3K3K3K-L 	 	
 	
 	
 	
 	
r+   c                 v   | j         j        }t          |j        j        g                              t          |j        j        |j        j                  	                    t          dd                                                  |j        j                  }|                     |g ddg di           d S )NrW   Tr   r   ))r   r   )r	   r   )r_   r   r   r   r   s      r)   %test_bound_in_heterogeneous_two_tuplez:ExpandingBoundInTest.test_bound_in_heterogeneous_two_tuple  s    & EGJ<  Uuwy%'),,00cT222  
 Xegj!! 	 	:::; 	 	
 	
 	
 	
 	
r+   c                 >   | j         j        }t          |j        j        g                              |j        j                            t          dd                              	                    |j        j                  }| 
                    |g dg i           d S r   r   r   s      r)   test_empty_set_against_integerz3ExpandingBoundInTest.test_empty_set_against_integer      & EGJ<  U579==3$!?!?!?@@AAXegj!! 	 	D"c2Y77777r+   c                 B   | j         j        }t          |j        j        g                              |j        j                            t          dd                              	                    |j        j                  }| 
                    |g ddg i           d S NrW   Tr   )re   rf   rg   r   r   )r3   r   r   rF   r    r   rU   notin_r
   rE   r@   r   s      r)   'test_empty_set_against_integer_negationz<ExpandingBoundInTest.test_empty_set_against_integer_negation      & EGJ<  U579##IcT$B$B$BCCDDXegj!! 	 	D":":":C9MMMMMr+   c                 >   | j         j        }t          |j        j        g                              |j        j                            t          dd                              	                    |j        j                  }| 
                    |g dg i           d S r   )r3   r   r   rF   r    r   r   r   r
   rE   r@   r   s      r)   test_empty_set_against_stringz2ExpandingBoundInTest.test_empty_set_against_string  r   r+   c                 B   | j         j        }t          |j        j        g                              |j        j                            t          dd                              	                    |j        j                  }| 
                    |g ddg i           d S r   )r3   r   r   rF   r    r   r   r   r
   rE   r@   r   s      r)   &test_empty_set_against_string_negationz;ExpandingBoundInTest.test_empty_set_against_string_negation  r   r+   c                 b   t          t          t                                          t	          ddd                    t                      fgt                                g          }t          t          j        	                    |          
                                d         d           d S )NfoorQ   T)valuer   )else_    )Fr  )r   r   r   r   r
   r   r   r   r;   r2   fetchone)r>   r   s     r)   test_null_in_empty_set_is_falsez4ExpandingBoundInTest.test_null_in_empty_set_is_false  s     !FFJJ )%rT J J J  !FF	  ''
 
 

 
 	FId##,,..q1:>>>>>r+   Nr   )rK   rL   rM   rN   rO   r*   r7   r@   r   r   rC   tuple_inr   r   r   r   r   r   r   r   r   r  rQ   r+   r)   r   r   o  sb       K
 
 [
 	
 	
 [	
B B B BA A A 8 8 8 8 8 8	O 	O 	O 
 
 
" 
 
 
&	8 	8 	8	N 	N 	N	8 	8 	8	N 	N 	N? ? ? ? ?r+   r   c                       e Zd ZdZdZdZed             Zed             Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )LikeFunctionsTestTonceNc                     t          d|t          dt          d          t          dt          d                               d S )Nr   r    Tr!   r#   rX   r%   r&   s     r)   r*   zLikeFunctionsTest.define_tables0  sI    4d33366"::&&		
 	
 	
 	
 	
r+   c                     |                     | j        j                                        ddddddddddd	dd
dddddddddddddddddg
           d S )Nr-   abcdefgr/   r   zab/cdefgr	   zab%cdefgr_   ab_cdefgrn   zabcde/fg   zabcde%fgrp   zab#cdefg   ab9cdefg	   zabcde#fg
   abcd9fgr1   r5   s     r)   r7   zLikeFunctionsTest.insert_data9  s    J!((**),,*--*--*--*--*--*--*--*--9--	
 	
 	
 	
 	
r+   c                 >   | j         j        }t          j                                        5 }d |                    t          |j        j        g          	                    |                    D             }d d d            n# 1 swxY w Y   t          ||           d S )Nc                     h | ]\  }|S rQ   rQ   ).0r  s     r)   	<setcomp>z*LikeFunctionsTest._test.<locals>.<setcomp>O  s*       E   r+   )r3   r   r   r;   connectr2   r   rF   r    r   r   )r>   r   expectedr   connrowss         r)   _testzLikeFunctionsTest._testK  s    [+
Y   	D "llJLO,--33D99   D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	D(s   ABB	Bc                     | j         j        j        j        }|                     |                    d          h d           d S )Nab%c
   r-   r   r	   r_   rn   r  rp   r  r  r  r3   r   rF   r#   r  
startswithr>   cols     r)   test_startswith_unescapedz+LikeFunctionsTest.test_startswith_unescapedX  s?    k$&+

3>>&))+J+J+JKKKKKr+   c                     | j         j        j        j        }|                     |                    dd          dh           d S )Nr  T
autoescaper	   r   r"  s     r)   test_startswith_autoescapez,LikeFunctionsTest.test_startswith_autoescape\  s>    k$&+

3>>&T>::QC@@@@@r+   c                     | j         j        j        j        }|                     |                    t          d                    h d           d S )Nz'ab%c'r  )r3   r   rF   r#   r  r!  r   r"  s     r)   test_startswith_sqlexprz)LikeFunctionsTest.test_startswith_sqlexpr`  sR    k$&+

NN>(3344+++	
 	
 	
 	
 	
r+   c                     | j         j        j        j        }|                     |                    dd          dh           d S )Nzab##c#escaperp   r   r"  s     r)   test_startswith_escapez(LikeFunctionsTest.test_startswith_escapeg  s>    k$&+

3>>'#>66<<<<<r+   c                     | j         j        j        j        }|                     |                    ddd          dh           |                     |                    ddd          dh           d S )Nr  Tr,  r'  r.  r	   zab#crp   r   r"  s     r)   !test_startswith_autoescape_escapez3LikeFunctionsTest.test_startswith_autoescape_escapek  sh    k$&+

3>>&T#>FFLLL

3>>&T#>FFLLLLLr+   c                     | j         j        j        j        }|                     |                    d          h d           d S )Ne%fg	   r-   r   r	   r_   rn   r  rp   r  r  r3   r   rF   r#   r  endswithr"  s     r)   test_endswith_unescapedz)LikeFunctionsTest.test_endswith_unescapedp  s?    k$&+

3<<'')D)D)DEEEEEr+   c                     | j         j        j        j        }|                     |                    t          d                    h d           d S )Nz'e%fg'r5  )r3   r   rF   r#   r  r7  r   r"  s     r)   test_endswith_sqlexprz'LikeFunctionsTest.test_endswith_sqlexprt  sR    k$&+

LL11224O4O4O	
 	
 	
 	
 	
r+   c                     | j         j        j        j        }|                     |                    dd          dh           d S )Nr4  Tr&  r  r6  r"  s     r)   test_endswith_autoescapez*LikeFunctionsTest.test_endswith_autoescapez  s>    k$&+

3<<4<881#>>>>>r+   c                     | j         j        j        j        }|                     |                    dd          dh           d S )Nze##fgr,  r-  r  r6  r"  s     r)   test_endswith_escapez&LikeFunctionsTest.test_endswith_escape~  s>    k$&+

3<<<44qc:::::r+   c                     | j         j        j        j        }|                     |                    ddd          dh           |                     |                    ddd          dh           d S )Nr4  Tr,  r1  r  ze#fgr  r6  r"  s     r)   test_endswith_autoescape_escapez1LikeFunctionsTest.test_endswith_autoescape_escape  h    k$&+

3<<4<DDqcJJJ

3<<4<DDqcJJJJJr+   c                     | j         j        j        j        }|                     |                    d          h d           d S )Nb%cder5  r3   r   rF   r#   r  containsr"  s     r)   test_contains_unescapedz)LikeFunctionsTest.test_contains_unescaped  s?    k$&+

3<<((*E*E*EFFFFFr+   c                     | j         j        j        j        }|                     |                    dd          dh           d S )NrC  Tr&  r	   rD  r"  s     r)   test_contains_autoescapez*LikeFunctionsTest.test_contains_autoescape  s>    k$&+

3<<D<99A3?????r+   c                     | j         j        j        j        }|                     |                    dd          dh           d S )Nzb##cder,  r-  rp   rD  r"  s     r)   test_contains_escapez&LikeFunctionsTest.test_contains_escape  s>    k$&+

3<<<55s;;;;;r+   c                     | j         j        j        j        }|                     |                    ddd          dh           |                     |                    ddd          dh           d S )Nzb%cdTr,  r1  r	   zb#cdrp   rD  r"  s     r)   test_contains_autoescape_escapez1LikeFunctionsTest.test_contains_autoescape_escape  rA  r+   )rK   rL   rM   rN   run_insertsrun_deletesrO   r*   r7   r  r$  r(  r*  r/  r2  r8  r:  r<  r>  r@  rF  rH  rJ  rL  rQ   r+   r)   r  r  *  sR       KKK
 
 [
 
 
 [
"  L L LA A A
 
 
= = =M M M
F F F
 
 
? ? ?; ; ;K K K
G G G@ @ @< < <K K K K Kr+   r  c                   N    e Zd ZdZdZed             Zed             Zd Zd Z	dS )ComputedColumnTestT)computed_columnsc                    t          d|t          dt          d          t          dt                    t          dt          t          d                    t          dt          t          d	                               d S )
Nsquarer    Tr!   sideareazside * side	perimeterz4 * side)r   r   r   r   r&   s     r)   r*   z ComputedColumnTest.define_tables  sq    4d33367##67H]$;$;<<;*)=)=>>	
 	
 	
 	
 	
r+   c                 z    |                     | j        j                                        ddddddg           d S )Nr-   r  )r    rT  *   )r2   r3   rS  r4   r5   s     r)   r7   zComputedColumnTest.insert_data  sP    J$$&&r""2r$:$:;	
 	
 	
 	
 	
r+   c                    t           j                                        5 }|                    t	          t          d          g                              | j        j                  	                    | j        j        j
        j                                                            }t          |ddg           d d d            d S # 1 swxY w Y   d S )N*)r-   r  r$   (   )r  rX       )r   r;   r  r2   r   r   select_fromr3   rS  rE   rF   r    r<   r   r>   r  ress      r)   test_select_allz"ComputedColumnTest.test_select_all  s    Y   	>D,,S		{##T[/00$+,.122  hjj	 
 &(;<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   BCC	C	c                    t           j                                        5 }|                    t	          | j        j        j        j        | j        j        j        j	        g          
                    | j        j                                      | j        j        j        j                                                            }t          |ddg           d d d            d S # 1 swxY w Y   d S )N)r$   r[  )r\  r]  )r   r;   r  r2   r   r3   rS  rF   rU  rV  r^  rE   r    r<   r   r_  s      r)   test_select_columnsz&ComputedColumnTest.test_select_columns  s   Y   	/D,,[').0B0D0NO  T[/00$+,.122  hjj  i-...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   B5C!!C%(C%N)
rK   rL   rM   rN   __requires__rO   r*   r7   ra  rc  rQ   r+   r)   rP  rP    sp        K(L
 
 [
 
 
 [
> > >	/ 	/ 	/ 	/ 	/r+   rP  c                   J    e Zd ZdZed             Zed             Zd Zd ZdS )
ExistsTestTc                     t          d|t          dt          d          t          dt          d                               d S )Nstuffr    Tr!   r#   rX   r%   r&   s     r)   r*   zExistsTest.define_tables  sI    4d33366"::&&		
 	
 	
 	
 	
r+   c           	          |                     | j        j                                        ddddddddddddg           d S )Nr-   	some datar/   r   r	   r_   zsome other data)r2   r3   rh  r4   r5   s     r)   r7   zExistsTest.insert_data  sj    J##%%+..+..+.."344		
 	
 	
 	
 	
r+   c           
      @   | j         j        }t          |                    t	          t          d          g                              t                                          |j        j	        dk                                  
                                dg           d S )Nr-   rj  re   r3   rh  r   r2   r   r   r   r   rF   r#   r<   r>   r6   rh  s      r)   test_select_existszExistsTest.test_select_exists  s    !

|$$**HHNN57<;#>??   hjjF	
 	
 	
 	
 	
r+   c           
      >   | j         j        }t          |                    t	          t          d          g                              t                                          |j        j	        dk                                  
                                g            d S )Nr-   zno datarl  rm  s      r)   test_select_exists_falsez#ExistsTest.test_select_exists_false  s    !

|$$**HHNN57<9#<==   hjj	
 	
 	
 	
 	
r+   N)	rK   rL   rM   rN   rO   r*   r7   rn  rp  rQ   r+   r)   rf  rf    sk        K
 
 [
 	
 	
 [	
	
 	
 	
	
 	
 	
 	
 	
r+   rf  c            	       l    e Zd ZdZdZed             Z ej        dddddd	d
          d             Z	dS )IsOrIsNotDistinctFromTestT)supports_is_distinct_fromc                     t          d|t          dt          d          t          dt          d          t          dt          d                     d S )Nis_distinct_testr    Tr!   col_a)nullablecol_br   r&   s     r)   r*   z'IsOrIsNotDistinctFromTest.define_tables  sZ    4d3337Gd3337Gd333	
 	
 	
 	
 	
r+   )both_int_differentr  r-   r-   )both_int_samer-   r-   r  )one_null_firstNr-   r-   )one_null_secondr  Nr-   )	both_nullNNr  iaaaz3col_a_value, col_b_value, expected_row_count_for_is)id_argnamesc                    | j         j        }|                    |                                d||dg           |                    |                    |j        j                            |j        j                                      	                                }t          t          |          |           |dk    rdnd}|                    |                    |j        j                            |j        j                                      	                                }t          t          |          |           d S )Nr-   )r    rv  rx  r  )r3   ru  r2   r4   r   rF   rv  is_distinct_fromrx  r<   r   lenisnot_distinct_from)r>   col_a_valuecol_b_valueexpected_row_count_for_isr6   tblr?   expected_row_count_for_isnots           r)   test_is_or_isnot_distinct_fromz8IsOrIsNotDistinctFromTest.test_is_or_isnot_distinct_from  s3    k*JJLLkBBC	
 	
 	

 ##JJsu{33CEK@@AA
 

(** 	 	KK%	
 	
 	
 +a//AAQ 	% ##JJsu{66su{CCDD
 

(** 	 	KK(	
 	
 	
 	
 	
r+   N)
rK   rL   rM   rN   rd  rO   r*   r   combinationsr  rQ   r+   r)   rr  rr    s~        K1L
 
 [
 W'"&'$F  
 
 
 
 
r+   rr  N)% r   r   
assertionsr   r   schemar   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
TablesTestr   rS   r   r   r   r  rP  rf  rr  rQ   r+   r)   <module>r     s                                                                                                                                                  "
 "
 "
 "
 "
(% "
 "
 "
JO< O< O< O< O<x* O< O< O<d\
 \
 \
 \
 \
h) \
 \
 \
~{J {J {J {J {J, {J {J {J|x? x? x? x? x?8. x? x? x?vlK lK lK lK lK+ lK lK lK^(/ (/ (/ (/ (/, (/ (/ (/V,
 ,
 ,
 ,
 ,
$ ,
 ,
 ,
^2
 2
 2
 2
 2
 3 2
 2
 2
 2
 2
r+   