U kf$@sddlmZddlZddlmZddlmZddlmZddlmZddl m Z ddl m Z dd l m Z dd l mZdd lmZdd lmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZd dlm Z d dlm!Z!d dlm"Z"d dlm#Z#d d lm$Z$d d!lm%Z%d d"lm&Z&d d#lm'Z'd d$lm(Z(d d%l)m*Z*d d&l)m+Z+Gd'd(d(ej,Z-Gd)d*d*ej,Z.Gd+d,d,ej/Z0Gd-d.d.ej,Z1Gd/d0d0ej,Z2Gd1d2d2ej,Z3Gd3d4d4ej,Z4Gd5d6d6eeej,Z5Gd7d8d8ej,Z6Gd9d:d:ej,Z7Gd;d<dd>ej,Z9Gd?d@d@ej,Z:GdAdBdBej,Z;GdCdDdDeej,ZGdIdJdJej,Z?dS)KN)AssertsCompiledSQL)AssertsExecutionResults)config)fixtures) assert_raises)eq_)in_) CursorSQL)Column)Table) bindparam)case)column)Computed)exists)false) ForeignKey)func)Identity)Integer)literal)literal_column)null)select)String)table)testing)text)true)tuple_) TupleType)union)values) DatabaseError)ProgrammingErrorc@s@eZdZdZeddZeddZddZej j dd Z d S) CollateTestTcCs&td|tdtddtdtddS)N some_tableidT primary_keydatadr r rrclsmetadatar2T/opt/hc_python/lib64/python3.8/site-packages/sqlalchemy/testing/suite/test_select.py define_tables4s   zCollateTest.define_tablescCs(||jjddddddgdS)N collate data1r)r,r collate data2executetablesr(insertr0 connectionr2r2r3 insert_data=s  zCollateTest.insert_datac Cs.tj}t|||W5QRXdSNrdbconnectrr:fetchallselfrresultconnr2r2r3_assert_resultGs zCollateTest._assert_resultcCsBtjtj}|t|jj|jjj j | ddgdS)N)r5r6)rr8) rrequiresZget_order_by_collationrrIrr;r(order_bycr,Zcollateasc)rFZ collationr2r2r3test_collate_order_byKs z!CollateTest.test_collate_order_byN) __name__ __module__ __qualname__ __backend__ classmethodr4r?rIrrJZorder_by_collationrNr2r2r2r3r'1s  r'c@sleZdZdZdZeddZeddZddZd d Z d d Z d dZ ddZ ddZ ejjddZdS)OrderByLabelTestzTest the dialect sends appropriate ORDER BY expressions when labels are used. This essentially exercises the "supports_simple_order_by_label" setting. Tc CsBtd|tdtddtdttdttdtdtd tddS) Nr(r)Tr*xyq2pr.r/r2r2r3r4bs   zOrderByLabelTest.define_tablesc CsB||jjddddddddddddddd d d dgdS) Nr5rq1Zp3)r)rUrVrWrYr q2Zp2Zq3p1r9r=r2r2r3r?ns zOrderByLabelTest.insert_datac Cs.tj}t|||W5QRXdSr@rArEr2r2r3rIys zOrderByLabelTest._assert_resultcCs6|jj}|jjd}|t||dddgdS)Nlxr5rr )r;r(rLrUlabelrIrrKrFrr^r2r2r3 test_plain}szOrderByLabelTest.test_plaincCs>|jj}|jj|jjd}|t||dddgdS)Nr^ra) r;r(rLrUrVrbrIrrKrcr2r2r3test_composed_intsz"OrderByLabelTest.test_composed_intcCsb|jj}|jj|jjd}t|jj|jj d}| t || || dddgdS)Nr^ly)r Zq1p3)rfZq2p2)rhZq3p1)r;r(rLrUrVrbrlowerrWrYrIrrKdesc)rFrr^rjr2r2r3test_composed_multiplesz'OrderByLabelTest.test_composed_multiplecCs:|jj}|jjd}|t||dddgdS)Nr^rar`r_) r;r(rLrUrbrIrrKrlrcr2r2r3test_plain_descsz OrderByLabelTest.test_plain_desccCsB|jj}|jj|jjd}|t|| dddgdS)Nr^rgrera) r;r(rLrUrVrbrIrrKrlrcr2r2r3test_composed_int_descsz'OrderByLabelTest.test_composed_int_desccCsT|jj}|jj|jjd}tt|jj | | |}| |dddgdS)Nr^)r5r )r5rf)r5rh) r;r(rLrUrVrbrrcountr)Zgroup_byrKrI)rFrexprstmtr2r2r3test_group_by_composeds z'OrderByLabelTest.test_group_by_composedN)rOrPrQ__doc__rRrSr4r?rIrdrirmrnrorrJZgroup_by_complex_expressionrsr2r2r2r3rTWs   rTc@seZdZdZdZddZdS)ValuesExpressionTest)Ztable_value_constructorTcCsHttdttdtdddddg}t|t|dddgdS)Nr)nameZ my_values)rv)r5Zname1)rZname2)r Zname3) r$rrrr,rr:rall)rFr>Z value_exprr2r2r3 test_tuplessz ValuesExpressionTest.test_tuplesN)rOrPrQ __requires__rRrxr2r2r2r3rusruc@s8eZdZdZeddZeddZdIdd ZdJd d Zd d Z ddZ e j j ddZe j jddZe jdddgdddgdddgdde j jddZe j j ddZe j jddZe j jd d!Ze j jd"d#Ze j j d$d%Ze j jd&d'Ze j jd(d)Ze j jd*d+Ze j j d,d-Ze j jd.d/Ze j jd0d1Z e j jd2d3Z!e j j e j j"d4d5Z#e j jd6d7Z$e j jd8d9Z%e j j&d:d;Z'e j j&e j j(dd?Z*e j j+d@dAZ,e j j+e j j(dBdCZ-e j j&e j j+dDdEZ.e j j&e j j+e j j(dFdGZ/dHS)KFetchLimitOffsetTestTcCs*td|tdtddtdttdtdSNr(r)Tr*rUrVr r rr/r2r2r3r4s z"FetchLimitOffsetTest.define_tablesc CsJ||jjddddddddddddddddddddgdS)Nr5rr)rUrVr r\rfr9r=r2r2r3r?s      z FetchLimitOffsetTest.insert_datar2FcCsT|r:|||}tt|t|tt|t|nt||||dSr@)r:rDrlenset)rFr>rrGparamsset_Z query_resr2r2r3rIs z#FetchLimitOffsetTest._assert_resultc Cs0tj}t||||W5QRXdSr@)rrBrCrZexec_driver_sqlrDrFrrGrrHr2r2r3_assert_result_strs z'FetchLimitOffsetTest._assert_result_strcCsP|jj}t||jj}|||dddg|||ddddgdSNrr5r5rrrr r r r r\)r;r(rrKrLr)rIlimit)rFr>rrrr2r2r3test_simple_limitsz&FetchLimitOffsetTest.test_simple_limitcCsL|jj}t|jjd}tt|t|}| ||dgdS)Nr5r_) r;r(rrLr)rZscalar_subqueryr#subqueryrI)rFr>rrrur2r2r3 test_limit_render_multiple_timessz5FetchLimitOffsetTest.test_limit_render_multiple_timescCsZ|jj}||t||jjdddg||t||jjddddgdSrr;r(rIrrKrLr)fetchrFr>rr2r2r3test_simple_fetchsz&FetchLimitOffsetTest.test_simple_fetchcCsZ|jj}||t||jjddddg||t||jjdddgdS)Nrrr\r\rfrfr\r~r r;r(rIrrKrLr)offsetrr2r2r3test_simple_offsetsz'FetchLimitOffsetTest.test_simple_offset)rrrr5)r r)r r5casesargnamescCsl|jj}|jid}dddddg}|D]@\}}||||}||t||jj| ||q&dS)N)Zcompiled_cacherrrrr) r;r(Zexecution_optionsrIrrKrLr)rr)rFr>rrZ assert_datarrexpectedr2r2r3test_simple_limit_offsets  z-FetchLimitOffsetTest.test_simple_limit_offsetcCsf|jj}||t||jjddddg||t||jjdddddgdS)Nrr5rrr rr r;r(rIrrKrLr)rrrr2r2r3test_simple_fetch_offset*sz-FetchLimitOffsetTest.test_simple_fetch_offsetcCs2|jj}|j|t|ddddddgdddS) N rrrrrTr)r;r(rIrrrr2r2r3test_fetch_offset_no_order9s  z/FetchLimitOffsetTest.test_fetch_offset_no_orderc Csb|jj}||t||jjddddddg||t||jjdddddgdS)Nrrrrrrr5rrr2r2r3test_simple_offset_zeroCs  z,FetchLimitOffsetTest.test_simple_offset_zerocCsX|jj}t||jjdd}|jt j j ddid}t |}| |ddgdS z7test that 'literal binds' mode works - no bound params.rr5 literal_bindsT)dialectcompile_kwargsrrN)r;r(rrKrLr)rrcompilerrBrstrrrFrrrsqlr2r2r3test_limit_offset_nobindsRsz.FetchLimitOffsetTest.test_limit_offset_nobindscCsX|jj}t||jjdd}|jt j j ddid}t |}| |ddgdSr)r;r(rrKrLr)rrrrrBrrrrr2r2r3test_fetch_offset_nobinds_sz.FetchLimitOffsetTest.test_fetch_offset_nobindscCsr|jj}|j|t||jjtdddgddid|j|t||jjtddddgddiddS)Nlrrrrrr ) r;r(rIrrKrLr)rrrr2r2r3test_bound_limitlsz%FetchLimitOffsetTest.test_bound_limitcCsv|jj}|j|t||jjtddddgddid|j|t||jjtdddddgddiddS) Norrrrrrr5) r;r(rIrrKrLr)rrrr2r2r3test_bound_offset}s z&FetchLimitOffsetTest.test_bound_offsetcCs|jj}|j|t||jjtd tdddgdddd|j|t||jjtd tddd d gd ddddS) Nrrrrrr5)rrrrrr ) r;r(rIrrKrLr)rrrrr2r2r3test_bound_limit_offsets2 z,FetchLimitOffsetTest.test_bound_limit_offsetcCs|jj}|j|t||jjtd tdddgdddd|j|t||jjtd tddd d gd ddddS) Nfrrrrr5)rrrrrr ) r;r(rIrrKrLr)rrrrr2r2r3test_bound_fetch_offsets2 z,FetchLimitOffsetTest.test_bound_fetch_offsetcCs>|jj}||t||jjtdtdddgdS)N12rr) r;r(rIrrKrLr)rrrr2r2r3test_expr_offsetsz%FetchLimitOffsetTest.test_expr_offsetcCs@|jj}||t||jjtdtddddgdS)Nrrrrr) r;r(rIrrKrLr)rrrr2r2r3test_expr_limitsz$FetchLimitOffsetTest.test_expr_limitcCsP|jj}||t||jjtdtd tdtdddgdSNrrr r;r(rIrrKrLr)rrrrr2r2r3test_expr_limit_offsetsz+FetchLimitOffsetTest.test_expr_limit_offsetcCsP|jj}||t||jjtdtd tdtdddgdSr) r;r(rIrrKrLr)rrrrr2r2r3test_expr_fetch_offsetsz+FetchLimitOffsetTest.test_expr_fetch_offsetcCs~|jj}||t||jjdt dt dddg||t||jjdt dt ddddgdS)Nrrrrr r) r;r(rIrrKrLr)rrrrr2r2r3test_simple_limit_expr_offsets. z2FetchLimitOffsetTest.test_simple_limit_expr_offsetcCs||jj}||t||jjtdtd dddg||t||jjtdtd dddgdS)Nrrrrr5rrrr2r2r3test_expr_limit_simple_offsets. z2FetchLimitOffsetTest.test_expr_limit_simple_offsetcCsr|jj}|j|t||jjjdddddgdd|j|t||jjjddddddgdddS) Nr5T with_tiesrrrr r r;r(rIrrKrLrUrlrrr2r2r3test_simple_fetch_tiessz+FetchLimitOffsetTest.test_simple_fetch_tiescCsZ|jj}|t||jjjdddd }t |ddt t |dddhdS)NrTrrrrr r;r(r:rrKrLrUrrrDrrrFr>rfar2r2r3test_fetch_offset_ties&sz+FetchLimitOffsetTest.test_fetch_offset_tiescCsl|jj}||t||jjjddddddg||t||jjjdddddd gdS) NrTrr5rrr rr) r;r(rIrrKrLrUrrrr2r2r3#test_fetch_offset_ties_exact_number3s2 z8FetchLimitOffsetTest.test_fetch_offset_ties_exact_numbercCs4|jj}||t||jjjddddgdS)NTpercentrrrr2r2r3test_simple_fetch_percentIs z.FetchLimitOffsetTest.test_simple_fetch_percentcCs<|jj}||t||jjjddddddgdS)N(Trr5rrrrr2r2r3test_fetch_offset_percentRsz.FetchLimitOffsetTest.test_fetch_offset_percentcCs@|jj}|j|t||jjjddddddgdddS)NrTrrrrrrrr2r2r3test_simple_fetch_percent_ties_s z3FetchLimitOffsetTest.test_simple_fetch_percent_tiescCs\|jj}|t||jjjddddd }t |ddt t |dddhdS) NrTrrrrrrrrr2r2r3test_fetch_offset_percent_tieslsz3FetchLimitOffsetTest.test_fetch_offset_percent_tiesN)r2F)r2)0rOrPrQrRrSr4r?rIrrrrrJZ fetch_firstrrr combinationsrrZfetch_no_order_byrrrrZbound_limit_offsetrrrrZsql_expression_limit_offsetrrrZfetch_expressionrrrZ fetch_tiesrZfetch_offset_with_optionsrrZ fetch_percentrrrrr2r2r2r3rzs                          rzc@sHeZdZdZdZdZeddZeddZdd Z d d Z d d Z dS)SameNamedSchemaTableTestztests for #7471T)Zschemasc CsBtd|tdtddtjdtd|tdtddtdtdddS) Nr(r)Tr*)schema some_table_idFZnullable)r r rr test_schemar/r2r2r3r4s   z&SameNamedSchemaTableTest.define_tablescCsD|ddtj\}}||ddi||ddddS)Nr( %s.some_tabler)r5)r)r)r;rrr:r<)r0r>r(some_table_schemar2r2r3r?s z$SameNamedSchemaTableTest.insert_datac CsJ|ddtj\}}t|t|||||jj|jj k ddS)Nr(rr5r5r5) r;rrrr:r join_fromrLrr)firstrFr>r(rr2r2r3test_simple_join_both_tabless z5SameNamedSchemaTableTest.test_simple_join_both_tablesc CsV|ddtj\}}t|t||||jj|jj k |jj dk ddS)Nr(rr5r5r5) r;rrrr:rrrLrr)whererrr2r2r3!test_simple_join_whereclause_onlys   z:SameNamedSchemaTableTest.test_simple_join_whereclause_onlyc Cs|ddtj\}}t||||jj|jjk|jjdk }t | t||jj|||jj|jjk|jjdk ddS)Nr(rr5r) r;rrrrrLrr)rrrr:r)rFr>r(rZsubqr2r2r3 test_subquerys0    z&SameNamedSchemaTableTest.test_subqueryN) rOrPrQrtrRryrSr4r?rrrr2r2r2r3r{s  rc@sZeZdZdZdddZeddZeddZd d Zd d Z d dZ ddZ ddZ dS)JoinTestTr2c Cs0tj}t||||W5QRXdSr@rArr2r2r3rIs zJoinTest._assert_resultc Cs@td|tdtddtd|tdtddtdtddd dS) Nar)Tr*ba_idza.idFr)r r rrr/r2r2r3r4s zJoinTest.define_tablesc Csj||jjddiddiddiddiddig||jjddddddddddddgdS)Nr)r5rr r\rf)r)r)r:r;rr<rr=r2r2r3r?s   zJoinTest.insert_datacCsN|dd\}}t|||||jj|jj}||ddddgdSNrrr)r5rr5)rr\r)r rfr r;r select_fromjoinrKrLr)rIrFrrrrr2r2r3test_inner_join_fks&zJoinTest.test_inner_join_fkc Csn|dd\}}t||||t|jj|jj}||ddt ddddd gd d d d gDdS)NrrcSs g|]\\}\}}|||fqSr2r2).0rrrLr2r2r3 s z1JoinTest.test_inner_join_true..r_r`rar\rerr)r\r)rfr ) r;rrrr rKrLr)rI itertoolsproductrr2r2r3test_inner_join_trues"    zJoinTest.test_inner_join_truecCsJ|dd\}}t||||t|jj|jj}||gdS)Nrr) r;rrrrrKrLr)rIrr2r2r3test_inner_join_falses  zJoinTest.test_inner_join_falsecCsT|dd\}}t||||t|jj|jj}||dddddgdS)Nrr)r5NN)rNN)r NN)r\NN)rfNN) r;rrZ outerjoinrrKrLr)rIrr2r2r3test_outer_join_false&s"  zJoinTest.test_outer_join_falsecCsN|dd\}}t|||||jj|jj}||ddddgdSrrrr2r2r3test_outer_join_fk:s&zJoinTest.test_outer_join_fkN)r2) rOrPrQrRrIrSr4r?rrrrrr2r2r2r3rs    rc@seZdZdZeddZeddZdddZd d Zd d Z e j j e j j d dZe j jddZddZe j j ddZddZdS)CompoundSelectTestTcCs*td|tdtddtdttdtdSr{r|r/r2r2r3r4Es z CompoundSelectTest.define_tablesc Cs@||jjddddddddddddddddgdS)Nr5rr}r r\rfr9r=r2r2r3r?Os     zCompoundSelectTest.insert_datar2c Cs0tj}t||||W5QRXdSr@rArr2r2r3rI[s z!CompoundSelectTest._assert_resultcCs\|jj}t||jjdk}t||jjdk}t||}|||j jddgdSNrr rr) r;r(rrrLr)r#rIrKselected_columnsrFrs1s2u1r2r2r3test_plain_union_s  z#CompoundSelectTest.test_plain_unioncCsd|jj}t||jjdk}t||jjdk}t||}|| |j jddgdSr) r;r(rrrLr)r#aliasrIrKrrr2r2r3test_select_from_plain_unionis z/CompoundSelectTest.test_select_from_plain_unioncCs|jj}t||jjdkd|jj}t||jjdkd|jj}t||d}| ||j jddgdSNrr5r rr) r;r(rrrLr)rrKr#rIrrr2r2r3&test_limit_offset_selectable_in_unionsss&& z9CompoundSelectTest.test_limit_offset_selectable_in_unionscCsv|jj}t||jjdk|jj}t||jjdk|jj}t||d}| ||j jddgdSr) r;r(rrrLr)rKr#rrIrrr2r2r3"test_order_by_selectable_in_unionss   z5CompoundSelectTest.test_order_by_selectable_in_unionscCsj|jj}t||jjdk}t||jjdk}t||d}| | |j jddgdSr) r;r(rrrLr)distinctr#rrIrKrrr2r2r3"test_distinct_selectable_in_unionss z5CompoundSelectTest.test_distinct_selectable_in_unionscCs|jj}t||jjdkd|jj}t||jjdkd|jj}t|| }| |d|jjddgdSr) r;r(rrrLr)rrKr#rrIrr2r2r3&test_limit_offset_in_unions_from_aliass&&z9CompoundSelectTest.test_limit_offset_in_unions_from_aliascCs|jj}t||jjdkd|jj}t||jjdkd|jj}t ||d}| ||j jddgdSr) r;r(rrrLr)rrKrr#rIrrr2r2r3.test_limit_offset_aliased_selectable_in_unionss,       zACompoundSelectTest.test_limit_offset_aliased_selectable_in_unionsN)r2)rOrPrQrRrSr4r?rIrrrrJZorder_by_col_from_unionZ/parens_in_union_contained_select_w_limit_offsetrZ0parens_in_union_contained_select_wo_limit_offsetrrrrr2r2r2r3rBs"        rc@sleZdZdZdZeddZeddZddZd d Z d d Z d dZ e j jddZe j jddZdS)PostCompileParamsTestT)Zstandard_cursor_sqlc Cs6td|tdtddtdttdttdtddS Nr(r)Tr*rUrVzrXr.r/r2r2r3r4s  z#PostCompileParamsTest.define_tablesc CsH||jjdddddddddddddddddd d dgdS Nr5rz1)r)rUrVrr z2r\z3rfz4r9r=r2r2r3r?s     z!PostCompileParamsTest.insert_datacCs<|jj}t|jj|jjtdddk}||didS)NrWTliteral_executezKSELECT some_table.id FROM some_table WHERE some_table.x = __[POSTCOMPILE_q] r;r(rrLr)rrUrassert_compilerFrrrr2r2r3 test_compiles z"PostCompileParamsTest.test_compilecCsB|jj}t|jj|jjtddddk}|j|didddS)NrWrTrz