î
vÐR\â<  ã               @   s#  d  d l  Z d  d l m Z d d l m Z m Z m Z m Z m	 Z	 d  d l
 Z
 d  d l
 m Z Gd d „  d e ƒ Z Gd d	 „  d	 e ƒ Z Gd
 d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z d d „  Z e d k re j ƒ  n  d S)é    N)ÚStringIOé   )ÚunittestÚConnectingTestCaseÚskip_before_postgresÚskip_before_pythonÚskip_copy_if_green)Úsqlc               @   s  e  Z d  Z e d d ƒ d d „  ƒ Z d d „  Z d d „  Z d	 d
 „  Z d d „  Z d d „  Z	 d d „  Z
 d d „  Z d d „  Z e d d ƒ d d „  ƒ Z d d „  Z d d „  Z d d „  Z d d „  Z d d  „  Z d! d" „  Z e e d# d ƒ d$ d% „  ƒ ƒ Z d& S)'ÚSqlFormatTestsé   é   c             C   si   t  j d ƒ j t  j d ƒ t  j d ƒ ƒ } | j |  j ƒ } |  j t | t ƒ ƒ |  j	 | d ƒ d  S)Nzselect {} from {}ÚfieldÚtablezselect "field" from "table")
r	   ÚSQLÚformatÚ
IdentifierÚ	as_stringÚconnÚ
assertTrueÚ
isinstanceÚstrÚassertEqual)ÚselfÚsÚs1© r   úL/var/www/dbchiro/venv/lib/python3.4/site-packages/psycopg2/tests/test_sql.pyÚtest_pos#   s
    zSqlFormatTests.test_posc             C   sÎ   t  j d ƒ j t  j d ƒ t  j d ƒ ƒ } | j |  j ƒ } |  j t | t ƒ ƒ |  j	 | d ƒ t  j d ƒ j t  j d ƒ t  j d ƒ ƒ } | j |  j ƒ } |  j t | t ƒ ƒ |  j	 | d ƒ d  S)Nzselect {0} from {1}r   r   zselect "field" from "table"zselect {1} from {0})
r	   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   Útest_pos_spec+   s    zSqlFormatTests.test_pos_specc             C   so   t  j d ƒ j d t  j d ƒ d t  j d ƒ ƒ } | j |  j ƒ } |  j t | t ƒ ƒ |  j	 | d ƒ d  S)Nzselect {f} from {t}Úfr   Útr   zselect "field" from "table")
r	   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   Ú	test_dict8   s
    !zSqlFormatTests.test_dictc             C   si   t  j d ƒ j t  j d ƒ t  j d ƒ ƒ } | j |  j ƒ } |  j t | t ƒ ƒ |  j	 | d ƒ d  S)Nzselect {0} from {1}r   r   zselect "field" from "table")
r	   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   Útest_unicode?   s
    zSqlFormatTests.test_unicodec             C   sV   t  j d ƒ j t  j t j d d d ƒ ƒ ƒ } | j |  j ƒ } |  j | d ƒ d  S)Nzselect {0};ià  é   é   zselect '2016-12-31'::date;)	r	   r   r   ÚLiteralÚdtÚdater   r   r   )r   r   r   r   r   r   Útest_compose_literalF   s    0z#SqlFormatTests.test_compose_literalc             C   s;   t  j d ƒ j ƒ  } | j |  j ƒ } |  j | d ƒ d  S)Nzselect foo;)r	   r   r   r   r   r   )r   r   r   r   r   r   Útest_compose_emptyK   s    z!SqlFormatTests.test_compose_emptyc             C   sG   t  j d ƒ j t  j d ƒ ƒ } | j |  j ƒ } |  j | d ƒ d  S)Nz42 % {0}r   z42 % 7)r	   r   r   r%   r   r   r   )r   r   r   r   r   r   Útest_percent_escapeP   s    !z"SqlFormatTests.test_percent_escapec             C   s~   t  j d ƒ j t  j d ƒ ƒ } |  j | j |  j ƒ d ƒ t  j d ƒ j t  j d ƒ ƒ } |  j | j |  j ƒ d ƒ d  S)Nz{{{0}}}r   z{7}z	{{1,{0}}}z{1,7})r	   r   r   r%   r   r   r   )r   r   r   r   r   Útest_braces_escapeU   s    !!z!SqlFormatTests.test_braces_escapec             C   s    |  j  t t j d ƒ j ƒ d  S)Nzselect {0};)ÚassertRaisesÚ
IndexErrorr	   r   r   )r   r   r   r   Útest_compose_badnargs[   s    z$SqlFormatTests.test_compose_badnargsc             C   sd   |  j  t t j d ƒ j ƒ |  j  t t j d ƒ j d d ƒ |  j  t t j d ƒ j d d ƒ d  S)Nz
select {};zselect {} {1};é
   é   zselect {0} {};)r,   r-   r	   r   r   Ú
ValueError)r   r   r   r   Útest_compose_badnargs_auto^   s    "z)SqlFormatTests.test_compose_badnargs_autoc             C   sE   |  j  t t j d ƒ j d d ƒ|  j  t t j d ƒ j d ƒ d  S)Nzselect {0};Úar/   zselect {x};)r,   r-   r	   r   r   ÚKeyError)r   r   r   r   Útest_compose_bad_args_typed   s    "z)SqlFormatTests.test_compose_bad_args_typec             C   sB   |  j  t t j d ƒ j d ƒ |  j  t t j d ƒ j d ƒ d  S)Nzselect {0};Úfoor/   )r,   Ú	TypeErrorr	   r   r   )r   r   r   r   Útest_must_be_composableh   s    z&SqlFormatTests.test_must_be_composablec             C   sH   |  j  t t j d ƒ j d d ƒ|  j  t t j d ƒ j d d ƒd  S)Nzselect {a!r};r3   r/   zselect {a:<};)r,   r1   r	   r   r   )r   r   r   r   Útest_no_modifiersl   s    "z SqlFormatTests.test_no_modifiersc             C   sT   Gd d „  d t  ƒ } |  j t j t j d ƒ j t j | ƒ  ƒ ƒ j |  j	 ƒ d  S)Nc               @   s   e  Z d  Z d S)z2SqlFormatTests.test_must_be_adaptable.<locals>.FooN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚFooq   s   r=   zselect {0};)
Úobjectr,   Úpsycopg2ÚProgrammingErrorr	   r   r   r%   r   r   )r   r=   r   r   r   Útest_must_be_adaptablep   s    z%SqlFormatTests.test_must_be_adaptablec          	   C   s±   |  j  j ƒ  } | j d ƒ | j t j d ƒ j t j d ƒ t j d ƒ j t t j d d d g ƒ ƒ t j	 ƒ  d j d ƒ ƒ d ƒ | j d ƒ |  j
 | j ƒ  d g ƒ d  S)Nz
            create table test_compose (
                id serial primary key,
                foo text, bar text, "ba'z" text)
            z*insert into {0} (id, {1}) values (%s, {2})Útest_composez, r6   Úbarzba'zé   r/   r3   ÚbÚczselect * from test_compose)r/   r3   rE   rF   )r/   r3   rE   rF   )r   ÚcursorÚexecuter	   r   r   r   ÚjoinÚmapÚPlaceholderr   Úfetchall)r   Úcurr   r   r   Útest_executew   s    *zSqlFormatTests.test_executec          	   C   sº   |  j  j ƒ  } | j d ƒ | j t j d ƒ j t j d ƒ t j d ƒ j t	 t j d d d g ƒ ƒ t j
 ƒ  d j d ƒ ƒ d d g ƒ | j d ƒ |  j | j ƒ  d d g ƒ d  S)Nz
            create table test_compose (
                id serial primary key,
                foo text, bar text, "ba'z" text)
            z*insert into {0} (id, {1}) values (%s, {2})rB   z, r6   rC   zba'zrD   r/   r3   rE   rF   r0   ÚdÚer   zselect * from test_compose)r/   r3   rE   rF   )r0   rO   rP   r   )r/   r3   rE   rF   )r0   rO   rP   r   )r   rG   rH   Zexecutemanyr	   r   r   r   rI   rJ   rK   r   rL   )r   rM   r   r   r   Útest_executemanyˆ   s    *zSqlFormatTests.test_executemanyé   c             C   sÒ   |  j  j ƒ  } | j d ƒ t d ƒ } | j t j d ƒ j d t j d ƒ d t j d ƒ ƒ | ƒ t ƒ  } | j t j d ƒ j d t j d ƒ d t j d ƒ ƒ | ƒ | j	 d	 ƒ |  j
 | j ƒ  d
 ƒ d  S)Nz
            create table test_compose (
                id serial primary key,
                foo text, bar text, "ba'z" text)
            z10	a	b	c
20	d	e	f
z'copy {t} (id, foo, bar, {f}) from stdinr    rB   r   zba'zz0copy (select {f} from {t} order by id) to stdoutr   zc
f
)r   rG   rH   r   Zcopy_expertr	   r   r   r   Úseekr   Úread)r   rM   r   r   r   r   r   Ú	test_copyš   s    %	%zSqlFormatTests.test_copyN)r:   r;   r<   r   r   r   r!   r"   r(   r)   r*   r+   r.   r2   r5   r8   r9   rA   rN   rQ   r   r   rU   r   r   r   r   r
   "   s$   r
   c               @   sd   e  Z d  Z d d „  Z d d „  Z d d „  Z d d „  Z d	 d
 „  Z d d „  Z d d „  Z	 d S)ÚIdentifierTestsc             C   s    |  j  t t j t j ƒ ƒ d  S)N)r   Ú
issubclassr	   r   Ú
Composable)r   r   r   r   Ú
test_class²   s    zIdentifierTests.test_classc             C   sƒ   |  j  t t j d ƒ t j ƒ ƒ |  j  t t j d ƒ t j ƒ ƒ |  j t t j d ƒ |  j t t j t j d d d ƒ ƒ d  S)Nr6   r/   ià  r#   r$   )r   r   r	   r   r,   r7   r&   r'   )r   r   r   r   Ú	test_initµ   s    ""zIdentifierTests.test_initc             C   s    |  j  t j d ƒ j d ƒ d  S)Nr6   )r   r	   r   Ústring)r   r   r   r   Útest_string»   s    zIdentifierTests.test_stringc             C   sE   t  j d ƒ } |  j t | ƒ d ƒ |  j t | ƒ t | ƒ ƒ d  S)Nzfo'ozIdentifier("fo'o"))r	   r   r   Úreprr   )r   Úobjr   r   r   Ú	test_repr¾   s    zIdentifierTests.test_reprc             C   s   |  j  t j d ƒ t j d ƒ k ƒ |  j  t j d ƒ t j d ƒ k ƒ |  j  t j d ƒ d k ƒ |  j  t j d ƒ t j d ƒ k ƒ d  S)Nr6   rC   )r   r	   r   r   )r   r   r   r   Útest_eqÃ   s    %%zIdentifierTests.test_eqc             C   sN   |  j  t j d ƒ j |  j ƒ d ƒ |  j  t j d ƒ j |  j ƒ d ƒ d  S)Nr6   z"foo"zfo'oz"fo'o")r   r	   r   r   r   )r   r   r   r   Útest_as_strÉ   s    %zIdentifierTests.test_as_strc             C   s$   |  j  t t j d ƒ d ƒ ƒ d  S)Nr6   rI   )r   Úhasattrr	   r   )r   r   r   r   Ú	test_joinÍ   s    zIdentifierTests.test_joinN)
r:   r;   r<   rY   rZ   r\   r_   r`   ra   rc   r   r   r   r   rV   ±   s   rV   c               @   sX   e  Z d  Z d d „  Z d d „  Z d d „  Z d d „  Z d	 d
 „  Z d d „  Z d S)ÚLiteralTestsc             C   s    |  j  t t j t j ƒ ƒ d  S)N)r   rW   r	   r%   rX   )r   r   r   r   rY   Ò   s    zLiteralTests.test_classc             C   s½   |  j  t t j d ƒ t j ƒ ƒ |  j  t t j d ƒ t j ƒ ƒ |  j  t t j d ƒ t j ƒ ƒ |  j  t t j d ƒ t j ƒ ƒ |  j  t t j t j d d d ƒ ƒ t j ƒ ƒ d  S)Nr6   s   fooé*   ià  r#   r$   )r   r   r	   r%   r&   r'   )r   r   r   r   rZ   Õ   s    """"	zLiteralTests.test_initc             C   s    |  j  t j d ƒ j d ƒ d  S)Nr6   )r   r	   r%   Úwrapped)r   r   r   r   Útest_wrappedÝ   s    zLiteralTests.test_wrappedc             C   sÀ   |  j  t t j d ƒ ƒ d ƒ |  j  t t j d ƒ ƒ d ƒ |  j t j d ƒ j |  j ƒ d ƒ |  j  t j d ƒ j |  j ƒ d ƒ |  j  t j t j	 d d d ƒ ƒ j |  j ƒ d ƒ d  S)	Nr6   zLiteral('foo')z'foo're   Z42iá  r   z'2017-01-01'::date)
r   r]   r	   r%   r   ÚassertQuotedEqualr   r   r&   r'   )r   r   r   r   r_   à   s    %%'zLiteralTests.test_reprc             C   s   |  j  t j d ƒ t j d ƒ k ƒ |  j  t j d ƒ t j d ƒ k ƒ |  j  t j d ƒ d k ƒ |  j  t j d ƒ t j d ƒ k ƒ d  S)Nr6   rC   )r   r	   r%   r   )r   r   r   r   r`   é   s    %%zLiteralTests.test_eqc             C   sB   Gd d „  d t  ƒ } |  j t j t j | ƒ  ƒ j |  j ƒ d  S)Nc               @   s   e  Z d  Z d S)z0LiteralTests.test_must_be_adaptable.<locals>.FooN)r:   r;   r<   r   r   r   r   r=   ð   s   r=   )r>   r,   r?   r@   r	   r%   r   r   )r   r=   r   r   r   rA   ï   s    z#LiteralTests.test_must_be_adaptableN)	r:   r;   r<   rY   rZ   rg   r_   r`   rA   r   r   r   r   rd   Ñ   s   	rd   c               @   s|   e  Z d  Z d d „  Z d d „  Z d d „  Z d d „  Z d	 d
 „  Z d d „  Z d d „  Z	 d d „  Z
 d d „  Z d S)ÚSQLTestsc             C   s    |  j  t t j t j ƒ ƒ d  S)N)r   rW   r	   r   rX   )r   r   r   r   rY   ø   s    zSQLTests.test_classc             C   sƒ   |  j  t t j d ƒ t j ƒ ƒ |  j  t t j d ƒ t j ƒ ƒ |  j t t j d ƒ |  j t t j t j d d d ƒ ƒ d  S)Nr6   r/   ià  r#   r$   )r   r   r	   r   r,   r7   r&   r'   )r   r   r   r   rZ   û   s    ""zSQLTests.test_initc             C   s    |  j  t j d ƒ j d ƒ d  S)Nr6   )r   r	   r   r[   )r   r   r   r   r\     s    zSQLTests.test_stringc             C   sg   |  j  t t j d ƒ ƒ d ƒ |  j  t t j d ƒ ƒ d ƒ |  j  t j d ƒ j |  j ƒ d ƒ d  S)Nr6   z
SQL('foo'))r   r]   r	   r   r   r   r   )r   r   r   r   r_     s    zSQLTests.test_reprc             C   s   |  j  t j d ƒ t j d ƒ k ƒ |  j  t j d ƒ t j d ƒ k ƒ |  j  t j d ƒ d k ƒ |  j  t j d ƒ t j d ƒ k ƒ d  S)Nr6   rC   )r   r	   r   r%   )r   r   r   r   r`   	  s    %%zSQLTests.test_eqc             C   sU   t  j d ƒ t  j d ƒ } |  j t | t  j ƒ ƒ |  j | j |  j ƒ d ƒ d  S)Nr6   rC   Úfoobar)r	   r   r   r   ÚComposedr   r   r   )r   r^   r   r   r   Útest_sum  s    zSQLTests.test_sumc             C   s[   t  j d ƒ } | t  j d ƒ 7} |  j t | t  j ƒ ƒ |  j | j |  j ƒ d ƒ d  S)Nr6   rC   rj   )r	   r   r   r   rk   r   r   r   )r   r^   r   r   r   Útest_sum_inplace  s    zSQLTests.test_sum_inplacec             C   sL   t  j d ƒ d } |  j t | t  j ƒ ƒ |  j | j |  j ƒ d ƒ d  S)Nr6   rD   Z	foofoofoo)r	   r   r   r   rk   r   r   r   )r   r^   r   r   r   Útest_multiply  s    zSQLTests.test_multiplyc             C   s   t  j d ƒ j t  j d ƒ t  j d ƒ t  j d ƒ g ƒ } |  j t | t  j ƒ ƒ |  j | j	 |  j
 ƒ d ƒ t  j d ƒ j t  j t  j d ƒ t  j d ƒ t  j d ƒ g ƒ ƒ } |  j t | t  j ƒ ƒ |  j | j	 |  j
 ƒ d ƒ t  j d ƒ j g  ƒ } |  j | t  j g  ƒ ƒ d  S)Nz, r6   rC   re   z"foo", bar, 42)r	   r   rI   r   r%   r   r   rk   r   r   r   )r   r^   r   r   r   rc     s    -6zSQLTests.test_joinN)r:   r;   r<   rY   rZ   r\   r_   r`   rl   rm   rn   rc   r   r   r   r   ri   ÷   s   ri   c               @   sp   e  Z d  Z d d „  Z d d „  Z d d „  Z d d „  Z d	 d
 „  Z d d „  Z d d „  Z	 d d „  Z
 d S)ÚComposedTestc             C   s    |  j  t t j t j ƒ ƒ d  S)N)r   rW   r	   rk   rX   )r   r   r   r   rY   /  s    zComposedTest.test_classc             C   s]   t  j t  j d ƒ t  j d ƒ g ƒ } |  j t | ƒ d ƒ |  j t | ƒ t | ƒ ƒ d  S)Nr6   zb'arz.Composed([Literal('foo'), Identifier("b'ar")]))r	   rk   r%   r   r   r]   r   )r   r^   r   r   r   r_   2  s    'zComposedTest.test_reprc             C   sJ   t  j d ƒ t  j d ƒ t  j d ƒ g } |  j t  j | ƒ j | ƒ d  S)Nr6   rC   Zbaz)r	   r   r%   r   r   rk   Úseq)r   Úlr   r   r   Útest_seq8  s    *zComposedTest.test_seqc             C   s¬   t  j d ƒ t  j d ƒ g } t  j d ƒ t  j d ƒ g } |  j t  j | ƒ t  j t | ƒ ƒ k ƒ |  j t  j | ƒ | k ƒ |  j t  j | ƒ t  j | ƒ k ƒ d  S)Nr6   zb'ar)r	   r%   r   r   rk   Úlist)r   rq   Úl2r   r   r   r`   <  s
    +zComposedTest.test_eqc             C   so   t  j t  j d ƒ t  j d ƒ g ƒ } | j d ƒ } |  j t | t  j ƒ ƒ |  j | j |  j	 ƒ d ƒ d  S)Nr6   zb'arz, z'foo', "b'ar")
r	   rk   r%   r   rI   r   r   rh   r   r   )r   r^   r   r   r   rc   C  s    'zComposedTest.test_joinc             C   sg   t  j t  j d ƒ g ƒ } | t  j d ƒ } |  j t | t  j ƒ ƒ |  j | j |  j ƒ d ƒ d  S)Nzfoo rC   z	foo 'bar')	r	   rk   r   r%   r   r   rh   r   r   )r   r^   r   r   r   rl   I  s    zComposedTest.test_sumc             C   sÖ   t  j t  j d ƒ g ƒ } | t  j d ƒ 7} |  j t | t  j ƒ ƒ |  j | j |  j ƒ d ƒ t  j t  j d ƒ g ƒ } | t  j t  j d ƒ g ƒ 7} |  j t | t  j ƒ ƒ |  j | j |  j ƒ d ƒ d  S)Nzfoo rC   z	foo 'bar')	r	   rk   r   r%   r   r   rh   r   r   )r   r^   r   r   r   rm   O  s    zComposedTest.test_sum_inplacec             C   s”   t  j t  j d ƒ t  j d ƒ g ƒ } t | ƒ } t | ƒ } |  j | t  j d ƒ ƒ t | ƒ } |  j | t  j d ƒ ƒ |  j t | j ƒ d  S)Nr6   rC   )	r	   rk   r   ÚiterÚnextr   r,   ÚStopIterationÚ__next__)r   r^   ÚitÚir   r   r   Ú	test_iterZ  s    'zComposedTest.test_iterN)r:   r;   r<   rY   r_   rr   r`   rc   rl   rm   r{   r   r   r   r   ro   .  s   ro   c               @   sX   e  Z d  Z d d „  Z d d „  Z d d „  Z d d „  Z d	 d
 „  Z d d „  Z d S)ÚPlaceholderTestc             C   s    |  j  t t j t j ƒ ƒ d  S)N)r   rW   r	   rK   rX   )r   r   r   r   rY   e  s    zPlaceholderTest.test_classc             C   s9   |  j  t j ƒ  j d  ƒ |  j  t j d ƒ j d ƒ d  S)Nr6   )r   r	   rK   Úname)r   r   r   r   Ú	test_nameh  s    zPlaceholderTest.test_namec             C   s^   |  j  t t j ƒ  ƒ d ƒ |  j  t t j ƒ  ƒ d ƒ |  j  t j ƒ  j |  j ƒ d ƒ d  S)NzPlaceholder()z%s)r   r   r	   rK   r]   r   r   )r   r   r   r   r_   l  s    zPlaceholderTest.test_reprc             C   sg   |  j  t t j d ƒ ƒ d ƒ |  j  t t j d ƒ ƒ d ƒ |  j  t j d ƒ j |  j ƒ d ƒ d  S)Nr6   zPlaceholder('foo')z%(foo)s)r   r   r	   rK   r]   r   r   )r   r   r   r   Útest_repr_nameq  s    zPlaceholderTest.test_repr_namec             C   s   |  j  t t j d ƒ d  S)Nú))r,   r1   r	   rK   )r   r   r   r   Útest_bad_namev  s    zPlaceholderTest.test_bad_namec             C   sÐ   |  j  t j d ƒ t j d ƒ k ƒ |  j  t j d ƒ t j d ƒ k ƒ |  j  t j d ƒ d k ƒ |  j  t j ƒ  t j ƒ  k ƒ |  j  t j d ƒ t j ƒ  k ƒ |  j  t j d ƒ t j d ƒ k ƒ d  S)Nr6   rC   )r   r	   rK   r%   )r   r   r   r   r`   y  s    %%"zPlaceholderTest.test_eqN)	r:   r;   r<   rY   r~   r_   r   r   r`   r   r   r   r   r|   d  s   r|   c               @   s(   e  Z d  Z d d „  Z d d „  Z d S)Ú
ValuesTestc             C   s?   |  j  t t j t j ƒ ƒ |  j t j j |  j ƒ d ƒ d  S)NÚNULL)r   r   r	   rƒ   r   r   r   r   )r   r   r   r   Ú	test_nullƒ  s    zValuesTest.test_nullc             C   s?   |  j  t t j t j ƒ ƒ |  j t j j |  j ƒ d ƒ d  S)NÚDEFAULT)r   r   r	   r…   r   r   r   r   )r   r   r   r   Útest_default‡  s    zValuesTest.test_defaultN)r:   r;   r<   r„   r†   r   r   r   r   r‚   ‚  s   r‚   c               C   s   t  j ƒ  j t ƒ S)N)r   Z
TestLoaderZloadTestsFromNamer:   r   r   r   r   Ú
test_suiteŒ  s    r‡   Ú__main__)Údatetimer&   Úior   Z	testutilsr   r   r   r   r   r?   r	   r
   rV   rd   ri   ro   r|   r‚   r‡   r:   Úmainr   r   r   r   Ú<module>   s   ( &76
