o znh5@sNddlZddlZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z Gd d d eZGd d d eZGd ddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdd d ed gd!ZGd"d#d#eZejd$d%ZdS)&N)event)util)url)DefaultDialect)_distill_params) _DDLCompilesc@s(eZdZdZdZdZddZddZdS) AssertRuleFNTcCsdSNselfexecute_observedr r G/usr/local/lib/python3.10/dist-packages/sqlalchemy/testing/assertsql.pyprocess_statementszAssertRule.process_statementcCsJd)NFz?All statements are complete, but pending assertion rules remainr r r r rno_more_statementsszAssertRule.no_more_statements)__name__ __module__ __qualname__ is_consumed errormessageconsume_statementrrr r r rr s  r c@ eZdZdS) SQLMatchRuleNrrrr r r rr$src@s"eZdZdZdddZddZdS) CursorSQLFNcCs||_||_dSr ) statementparams)r rrr r r__init__+ zCursorSQL.__init__cCsp|jd}|j|jks|jdur%|j|jkr%d|j|j|j|jf|_dS|jdd|_|js6d|_dSdS)Nrz5Testing for exact SQL %s parameters %s received %s %sT) statementsrr parametersrpoprr)r rstmtr r rr/s    zCursorSQL.process_statementr )rrrrrrr r r rr(s  rc@sFeZdZdddZddZddZd d Zd d Zd dZddZ dS) CompiledSQLNdefaultcCs||_||_||_dSr )rrdialect)r rrr'r r rrEs zCompiledSQL.__init__cCstdd|j}||kSN[\n\t])resubr)r rreceived_statementr$r r r _compare_sqlJszCompiledSQL._compare_sqlcCsB|jdkrtS|jdkrddi}ni}t|jdi|S)Nr& postgresqlimplicit_returningTr )r'rrURL get_dialect)r rrr r r_compile_dialectNs   zCompiledSQL._compile_dialectcs|j}||}t|jjtr|jjj||jddn|jjj||jj |jj |jddt ddt }|j}|sHg}||fSfdd|D}||fS)zxreconstruct the statement and params in terms of a target dialect, which for CompiledSQL is just DefaultDialect.schema_translate_map)r'r4)r' column_keysinliner4r)r*csg|]}|qSr )construct_params).0mcompiledr r us z3CompiledSQL._received_statement..)contextr3 isinstancer;rrcompileexecution_optionsgetr5r6r+r,r text_typer"r7)r rr=compare_dialect_received_statementr"_received_parametersr r:rrDYs4   zCompiledSQL._received_statementc Cs|j}||\}}||}|||}|r^|dur^t|}t|}|rX|rXt|d} tt|D]\} } | D]} | | vsH| | | | krJnq:|| =nq4d}n|rX|s'|s\|r^d}|rhd|_d|_ dS| |||d|_ dS)NrFT)r-received_parameters) r=rD _all_paramsr.listdictr# enumeraterr_failure_message) r rr=rDrEr equivalent all_params all_receivedparamidxreceived param_keyr r rr{sB    zCompiledSQL.process_statementcCs<|jrt|jr||}n|j}t|ts|g}|SdSr )rrcallabler>rH)r r=rr r rrGs   zCompiledSQL._all_paramscC"d|jddt|ddfS)NzzTesting for compiled statement %r partial params %s, received %%(received_statement)r with params %%(received_parameters)r%%%)rreplacereprr expected_paramsr r rrK  zCompiledSQL._failure_messageNr&) rrrrr.r3rDrrGrKr r r rr%Ds  "1 r%c@s&eZdZdddZddZddZdS) RegexSQLNcCs,t|t||_||_||_d|_dSr\)rrr+r?regex orig_regexrr')r r^rr r rrs   zRegexSQL.__init__cCrT)Nz{Testing for compiled statement ~%r partial params %s, received %%(received_statement)r with params %%(received_parameters)rrUrV)r_rWrXrYr r rrKr[zRegexSQL._failure_messagecCst|j|Sr )boolr^match)r rr-r r rr.szRegexSQL._compare_sqlr )rrrrrKr.r r r rr]s  r]cs4eZdZddZddZfddZddZZS) DialectSQLcCs|jjSr )r=r'r r r rr3szDialectSQL._compile_dialectcCstdd|}||kSr()r+r,)r real_stmt received_stmtr$r r r_compare_no_spaceszDialectSQL._compare_no_spacecsJtt||\}}|jD] }||j|rnq td|||jjfS)NzICan't locate compiled statement %r in list of statements actually invoked) superrbrDr!rerAssertionErrorr=compiled_parameters)r rrdreceived_paramsrc __class__r rrDs  zDialectSQL._received_statementcCsztdd|j}|jjj}|dkrtdd|}||kSd}|dkr%d}n |dkr,d }n|d kr2d}td||}||kS) Nr)r*pyformatz :([\w_]+)z%(\1)sqmark?formatz%snumeric)r+r,rr=r' paramstyle)r rr-r$rqreplr r rr.s  zDialectSQL._compare_sql)rrrr3rerDr. __classcell__r r rjrrbs  rbc@$eZdZddZddZddZdS)CountStatementscCs||_d|_dSNrcount_statement_count)r rxr r rr r zCountStatements.__init__cCs|jd7_dS)N)ryr r r rrsz!CountStatements.process_statementcCs$|j|jkrJd|j|jfdS)NFz,desired statement count %d does not match %drwrr r rrs z"CountStatements.no_more_statementsN)rrrrrrr r r rru s ruc@seZdZddZddZdS)AllOfcGt||_dSr )setrulesr r~r r rrzAllOf.__init__cCslt|jD]%}d|_|||jr!|j||jsd|_dS|js*d|_dSqt|jdj|_dSNTr)rHr~rrrdiscardr rruler r rrs  zAllOf.process_statementN)rrrrrr r r rr{s r{cs,eZdZddZddZfddZZS)EachOfcGr|r )rHr~rr r rr/rzEachOf.__init__cCs^|jr%|jd}|||jr|jdn|jr|j|_|jr"n|js|js-d|_dSdS)NrT)r~rrr#rrrr r rr2s   zEachOf.process_statementcs@|jr|jdjs|jddS|jrtt|dSdSrv)r~rrrfrrrjr rr@s zEachOf.no_more_statements)rrrrrrrsr r rjrr.src@eZdZddZdS)OrcCs>|jD]}|||jrd|_dSqt|jdj|_dSr)r~rrrHrrr r rrHs  zOr.process_statementN)rrrrr r r rrG rc@r)SQLExecuteObservedcCs"||_||_t|||_g|_dSr )r= clauseelementrr"r!)r r=r multiparamsrr r rrSs  zSQLExecuteObserved.__init__N)rrrrr r r rrRrrc@r)SQLCursorExecuteObservedNrr r r rrZsr)rr"r= executemanyc@rt) SQLAssertercCs g|_dSr ) accumulatedrr r rrds zSQLAsserter.__init__cCs|j|_|`dSr )r_finalrr r r_closegszSQLAsserter._closecGsht|}t|j}|r#|d}|||jrn |jr!J|j|s |r)Jd|js2|dSdS)NrFz Additional SQL statements remain)rrHrr#rrrr)r r~robservedrr r rassert_ks     zSQLAsserter.assert_N)rrrrrrr r r rrcs rc #stgt|dfdd}t|dfdd}zVWt|d|t|d|dSt|d|t|d|w)Nbefore_executecs|||fdd<dSr r )connrrr)origr rconnection_executesz)assert_engine..connection_executeafter_cursor_executecsj|sdSjrjdj|urjd}nt|ddd}j||jt||||dS)Nrrzr)rr=rappendr!r)rcursorrr"r=robsasserterrr rcursor_executes  z%assert_engine..cursor_execute)rr listens_forremover)enginerrr rr assert_engine|s    r) collections contextlibr+r*rrrrengine.defaultr engine.utilrschemarobjectr rrr%r]rbrur{rrr namedtuplerrcontextmanagerrr r r rs<      .