[Jcd@sdZddkZddkZddklZlZlZlZddkl Z l Z lZ l Z ddkl Zedddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcg^ZeiddeiZeideZeidfeiZeidgeiZhdhdi6djdk6dldm6dndo6dpdq6Zh"dre i6dse i6dte i6due i6dve i6dwe i6dxe i6dye i 6dxe i!6dze i"6d{e i#6d|e i$6d}e i%6d~e i&6de i'6de i(6de i)6e*de i+6e*de i,6e*de i-6e*de i.6de i/6de i06de i16de i26de i36de i46de i56de i66de i76de i86de i96de i:6de i;6Z<h de i=6de i>6de i?6de i@6de iA6de iB6de iC6de iD6de iE6de iF6de iG6ZHhdd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd6ZIde iJfdYZKdeiLfdYZMdeiNfdYZOdeOfdYZPdeOfdYZQdeRfdYZSdS(sBase SQL and DDL compiler implementations. Provides the :class:`~sqlalchemy.sql.compiler.DefaultCompiler` class, which is responsible for generating all SQL query strings, as well as :class:`~sqlalchemy.sql.compiler.SchemaGenerator` and :class:`~sqlalchemy.sql.compiler.SchemaDropper` which issue CREATE and DROP DDL for tables, sequences, and indexes. The elements in this module are used by public-facing constructs like :class:`~sqlalchemy.sql.expression.ClauseElement` and :class:`~sqlalchemy.engine.Engine`. While dialect authors will want to be familiar with this module for the purpose of creating database-specific compilers and schema generators, the module is otherwise internal to SQLAlchemy. iN(tschematenginetutiltexc(t operatorst functionsRtvisitors(t expressiontalltanalysetanalyzetandtanytarraytastasct asymmetrict authorizationtbetweentbinarytbothtcasetcasttchecktcollatetcolumnt constrainttcreatetcrosst current_datet current_rolet current_timetcurrent_timestampt current_usertdefaultt deferrabletdesctdistincttdotelsetendtexcepttfalsetfortforeigntfreezetfromtfulltgranttgroupthavingtiliketint initiallytinnert intersecttintotistisnulltjointleadingtlefttliketlimitt localtimetlocaltimestamptnaturaltnewtnottnotnulltnulltofftoffsettoldtontonlytortordertoutertoverlapstplacingtprimaryt referencestrighttselectt session_usertsettsimilartsomet symmetricttabletthenttottrailingttruetuniontuniquetusertusingtverbosetwhentwheres ^[A-Z0-9_$]+$s[0-9$]s%(?s>=t=tDISTINCTs||cCs$d||f|o d|pdS(s %s LIKE %ss ESCAPE '%s't((txtytescape((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytNscCs$d||f|o d|pdS(s%s NOT LIKE %ss ESCAPE '%s'Rx((RyRzR{((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyR|OscCs$d||f|o d|pdS(slower(%s) LIKE lower(%s)s ESCAPE '%s'Rx((RyRzR{((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyR|PscCs$d||f|o d|pdS(slower(%s) NOT LIKE lower(%s)s ESCAPE '%s'Rx((RyRzR{((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyR|QstBETWEENtMATCHtINsNOT INs, tDESCtASCtFROMtAStEXISTStISsIS NOTtCOLLATEscoalesce%(expr)st CURRENT_DATEt CURRENT_TIMEtCURRENT_TIMESTAMPt CURRENT_USERt LOCALTIMEtLOCALTIMESTAMPsrandom%(expr)stsysdatet SESSION_USERtUSERtmonthtdaytyeartsecondthourtdoytminutetquartertdowtweektepocht millisecondst microsecondst timezone_hourttimezone_minutet _CompileLabelcBs2eZdZdZdZdZedZRS(s<lightweight label object which acts as an expression._Label.tlabeltelementtnamecCs||_||_dS(N(RR(tselftcolR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt__init__s cCs |iiS(N(Rtquote(R((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs(selementsname(t__name__t __module__t__doc__t__visit_name__t __slots__RtpropertyR(((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs  tDefaultCompilercBs5eZdZeZeZeZe Z Z Z d5e dZdZdZdZd5dZeeZdZdZd5e dZd5d Zd Zd Zd Zd ZdZdZdZdZ dZ!dZ"dZ#d5dZ$dZ%dZ&e e'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/d Z0d!Z1e d"Z2d#Z3e e'e d$d%Z4d&Z5d'Z6d(Z7d)Z8e d*Z9e d+Z:d,Z;d-Z<d.Z=d/Z>d0Z?d1Z@d2ZAd3ZBd4ZCRS(6sDefault implementation of Compiled. Compiles ClauseElements into SQL strings. Uses a similar visit paradigm as visitors.ClauseVisitor but implements its own traversal. cKstii||||||pt|dt|_h|_ti|_ g|_ h|_ |i i |_ |i o g|_nt|i i|_|i i|_|i ip |i i|_ti|i|_h|_dS(sConstruct a new ``DefaultCompiler`` object. dialect Dialect to be used statement ClauseElement to be compiled column_keys a list of column names to be compiled into an INSERT or UPDATE statement. tinlineN(RtCompiledRtgetattrtFalseRtbindsRt column_dictt bind_nameststackt result_maptdialectt positionalt positiontuptBIND_TEMPLATESt paramstylet bindtemplatetidentifier_preparertpreparert label_lengthtmax_identifier_lengtht PopulateDictt _process_anontanon_mapttruncated_names(RRt statementt column_keysRtkwargs((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs     cCs|i|i|_dS(N(tprocessRtstring(R((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytcompilescKs|i||S(N(t_compiler_dispatch(RtobjR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRscCst|idjS(Ni(tlenR(R((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt is_subqueryscCs|oti|}h}x|iiD]\}}xq|i|i|fD]&}||jo||||^s c3s"x|]}i|VqWdS(N(R(Rtc(R(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pys ^s (toperatorRRtcomma_opRR;tclauses(Rt clauselistRtsep((Rs;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_clauselistVs    cKsd}|io||i|id7}nxC|iD]8\}}|d|i|d|i|d7}q8W|io"|d|i|id7}n|d7}|S(NsCASE RsWHEN s THEN sELSE tEND(RRtwhenstelse_(RtclauseRRytcondtresult((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt visit_caseas  0 " cKs&d|i|i|i|ifS(NsCAST(%s AS %s)(RRR(RRR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt visit_castlscKs5|ii|i|i}d||i|ifS(NsEXTRACT(%s FROM %s)(t extract_maptgettfieldRtexpr(RtextractRR"((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt visit_extractoscKs|dj o&|id|if||iis RR/s GROUP BY RxRR(RtappendR!RtTrueRR;t enumeratetselectstkeywordRt_group_by_clausetorder_by_clauset_limitt_offsett limit_clausetpop(RtcsR/R0RtentryRtgroup_by((RR/s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_compound_selects*: cKsf|i|i}|io|i|id|}n|io|d|i|i}n|S(NR(RRRRtmodifier(RtunaryRR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt visit_unarys   cKs~|i|i}ti|o,||i|i|i|i|iS|i|id|d|i|iSdS(NR(RRRRRR=RSt modifiers(RRRtop((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt visit_binarys,cCs|ii|t|S(N(RR!tstr(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRscKs|i|}||ijoL|i|}||j o.|ip |iotid|iqkn||i|i<|i|<|i|S(NsIBind parameter '%s' conflicts with unique bind parameter of the same name(t_truncate_bindparamRR`Rt CompileErrorRR(RRRRtexisting((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_bindparams !cCsb||ijo |i|S|i}t|tio|id|p|}||i|<|S(NR(RRRRRR(RRt bind_name((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRIs   cCs||f|ijo|i||fS||i}t||ijoY|ii|d}|dt|idd!dt|d}|d|i|s R/RsSELECT Rc3s"x|]}i|VqWdS(N(R(RRy(R(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pys "s s, s FROM c3s(x!|]}i|dtVqWdS(R/N(RR4(Rtf(R(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pys (s s WHERE s GROUP BY s HAVING RR( RR!Rt_get_display_fromsRVRt _from_objectsR3RRRt unique_listt inner_columnsRRjR4t _prefixesR;tget_select_precolumnsRt _whereclauseR8Rt_havingt_order_by_clauseR9R:R;R<t for_updatetfor_update_clauseR=(RRTR/R0R.R1RR?t existingfromstfromstcorrelate_fromstcolumn_clause_argsR*tcoRoRttR@((Rs;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt visit_selectsV(H . '     cCs|iodpdS(sQCalled when building a ``SELECT`` statement, position is just before column list.s DISTINCT Rx(t _distinct(RRT((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRqIscCs*|i|i}|o d|SdSdS(Ns ORDER BY Rx(RRt(RRTtorder_by((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyR9Ns cCs|iodSdSdS(Ns FOR UPDATERx(Ru(RRT((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRvUs cCs~d}|idj o|dt|i7}n|idj o9|idjo|d7}n|dt|i7}n|S(NRxs LIMIT s LIMIT -1s OFFSET (R:RRHR;(RRTR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyR<[scKsv|ogt|ddo7|ii|i|id|ii|i|iS|ii|i|iSndSdS(NRRRx(RRRRRRR(RRZR/R((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt visit_tablees 7cKsU|i|idt|iodpd|i|idtd|i|iS(NR/s LEFT OUTER JOIN s JOIN s ON (RR=R4tisouterRStonclause(RR;R/R((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt visit_joinnscCsdS(N(R(Rtseq((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_sequencersc CsNt|_|i|}|i}didgg}|iD]}||i|q;~}| o9|ii o+|ii ot i d|ii n| o)|iio|d|i |ifS|d|i |idig}|D]}||i|dq~dig} |D]}| |dq*~ fSdS( NRtINSERTs?The version of %s you are using does not support empty inserts.s INTO %s DEFAULT VALUESs INTO %s (%s) VALUES (%s)s, ii(R4tisinsertt_get_colparamsRR;RpRRtsupports_default_valuestsupports_empty_insertRRJRt format_tableRZt format_column( Rt insert_stmtt colparamsRR*Rytinsertt_[2]Rt_[3]((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt visit_insertus    1$ 'csiiht|igd6t_i|}didii |iddifd|Df}|i o|di |i 7}nii d|S( NR.RtUPDATEtSETs, c3sBx;|]4}ii|di|did|dVqWdS(iRviN(RRR(RR(R(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pys s s WHERE i( RR3RVRZR4tisupdateRR;RRRrRR=(Rt update_stmtRR((Rs;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt visit_updates#  c sfd}g_g_idjoE|idjo5g}|iiD]}||||dfqR~Sidjo h}ntdiD}|idj o=x:|iiD]%\}}|i t i ||qWng}x|iiD]}|i |jol||i } t i | o||| } n&ii|i| i} |i|| fq t|tioio|ioiioi ot|itio|ii p2ii p'|idj oGt|iti o0|i|||dfii|qqt|itiot|iit ioJ|i|i|iiif|ipii|qq|i|||dfii|q|i dj o"|ipii|qqt|itioXi|i} | dj o5|i|| f|ipii|qqqqi!ot|i"tiot|i"it io<|i|i|i"iifii|q|i|||dfii|q|i#dj oii|qt|i"ti$oii|qqq q W|S(sscreate a set of tuples representing column/string pairs for use in an INSERT or UPDATE statement. csDti|i|d|i}|i|i<ii|S(NR (RRRRRRRI(RRR(R(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytcreate_bind_paramscss(x!|]}ti|dfVqWdS(N(Rt_column_as_keyR(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pys s N(%t postfetchtprefetchRRt parametersRZtcolumnstdictRt setdefaultRRRt _is_literalR3Rt self_groupRRtColumnRt primary_keyRtpreexecute_pk_sequencesRR"tSequencetoptionaltsupports_pk_autoincrementt ColumnDefaulttargt ClauseElementtserver_defaultRtonupdatetserver_onupdatet FetchedValue( RtstmtRR*RRtktvtvaluesRtproc((Rs;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRsz   5   !   "(      ( cCs|iiht|igd6t|_d|ii|i}|io|d|i |i7}n|ii d|S(NR.s DELETE FROM s WHERE i( RR3RVRZR4tisdeleteRRRrRR=(Rt delete_stmtR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt visit_deletes#  cCsd|ii|S(Ns SAVEPOINT %s(Rtformat_savepoint(Rtsavepoint_stmt((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_savepointscCsd|ii|S(NsROLLBACK TO SAVEPOINT %s(RR(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_rollback_to_savepointscCsd|ii|S(NsRELEASE SAVEPOINT %s(RR(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_release_savepointscCs|ipdS(NRx(R(R((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt__str__ sN(DRRRt OPERATORSRt FUNCTIONSRt EXTRACT_MAPR RRRRRRRRRRRRRRRRRRRRRR RRRRR%R+R(R&R4RARDRGRRLRIRRURRR^RjR}RqR9RvR<RRRRRRRRRRR(((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRsr6                           K        U   tDDLBasecBseZdZdZRS(csggdtiffdY}|}x/D]'}x|iD]}|i|qHWq8WS(NtFindAlterablescseZfdZRS(cs/|io!|ijoi|ndS(N(t use_alterRZR3(RR(ttablest alterables(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_foreign_key_constraints(RRR((RR(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs(Rt SchemaVisitort constraintsttraverse(RRRtfindalterablesRZR((RRs;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytfind_alterabless"  cCs|okt||iijoJt|dd}|d|_|d|iid!dt|idS|Sn|ii||SdS(NRSiiiRNi(RRRRRSRPtvalidate_identifier(RRWttruncateRS((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt_validate_identifiers +(RRRR(((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyR s tSchemaGeneratorcBseZeddZedZdZdZdZdZ dZ dZ dZ d Z d Zd Zd Zd ZdZdZdZdZRS(cKsXtt|i||||_|o t|pd|_|i|_||_ dS(N( tsuperRRt checkfirstRVRRRRR(RRt connectionRRR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyR(s   cCs tdS(N(tNotImplementedError(RRtfirst_pk((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytget_column_specification/scCsb|ii|i|io|ii|in|i p#|ii|i|id|i S(NR(RRRRRt has_tableR(RRZ((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt _can_create2s cCs|io |i}n|ii}g}ti|D]!}|i|o ||q:q:~}x|D]}|i|qkW|iio+x(|i|D]}|i |qWndS(N( RRtsql_utilt sort_tablesRttraverse_singleRtsupports_alterRtadd_foreignkey(RtmetadataRR*R|t collectionRZt alterable((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_metadata8s  > c Cs)x(|idD]}|d||iqWx5|iD]*}|idj o|i|iq5q5W|iddidg|id|i i |dgd}t }x|iD]y}|i|d}|id|i |d |i o| |i o t}nx|iD]}|i|qWqW|i o|i|i nxMg}|iD]!}||i j o ||qbqb~D]}|i|qW|id |i||it|d o%x"|iD]} |i| qWnx(|id D]}|d ||iqWdS( Ns before-creates RtCREATEtTABLERs, s Rs )%s tindexess after-create(t ddl_listenersRRR"RRR3R;RpRRRRRR4Rtpost_create_tabletexecuteRgR( RRZtlistenerRt separatorRRR*RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRDsL    +    9  cCsdS(NRx((RRZ((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRoscCsct|itioEt|iitod|iiSt|i|iidSndSdS(Ns'%s'( RRRt DefaultClauseRt basestringtunicodet_compileR(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytget_column_default_stringrs  cCs)|ii|i||}|i|S(sIcompile the given string/parameters using this SchemaGenerator's dialect.(Rtstatement_compilerR(Rt tocompileRtcompiler((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyR{s cCsc|id|idj o!|id|ii|n|id|i|i|dS(Ns, sCONSTRAINT %s s CHECK (%s)(R3RRRtformat_constrainttsqltexttdefine_constraint_deferrability(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_check_constraints   cCs%|id|i|i|dS(Ns CHECK (%s)(R3RR(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_column_check_constraintscst|djodSid|idj o!idii|nididdifd|Di|dS(Nis, sCONSTRAINT %s s PRIMARY KEY s(%s)s, c3s.x'|] }ii|i|iVqWdS(N(RRR(RR(R(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pys s (RR3RRRRR;R(RR((Rs;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_primary_key_constraints ! cCs:|io|iiodS|id|i|dS(Ns, (RRRR3tdefine_foreign_key(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs cCs;|id|ii|i|i||idS(NsALTER TABLE %s ADD (R3RRRZRR(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs  c s |i|idj o|idi|nt|idii}|iddi fd|iDi |di fd|iDf|i dj o|id|i n|i dj o|id|i n|i |dS( NsCONSTRAINT %s is"FOREIGN KEY(%s) REFERENCES %s (%s)s, c3s1x*|]#}i|ii|iiVqWdS(N(RtparentR(RRk(R(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pys s c3s1x*|]#}i|ii|iiVqWdS(N(RRR(RRk(R(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pys s s ON DELETE %ss ON UPDATE %s(RRRR3RtlisttelementsRRZR;RtondeleteRR(RRRZ((Rs;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs      csyid|idj o!idii|niddifd|Di|dS(Ns, sCONSTRAINT %s s UNIQUE (%s)s, c3s.x'|] }ii|i|iVqWdS(N(RRR(RR(R(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pys s (R3RRRRR;R(RR((Rs;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytvisit_unique_constraints   *cCsh|idj o,|io|idq<|idn|idj o|id|indS(Ns DEFERRABLEs NOT DEFERRABLEs INITIALLY %s(R#RR3R5(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs  cCsdS(N((RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRscs|i|id|io|idn|idi|i|it|ii|idi fd|i Df|i dS(NsCREATE sUNIQUE sINDEX %s ON %s (%s)s, c3s+x$|]}i|i|iVqWdS(N(RR(RR(R(s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pys s ( RR3R`RRRR4RRZR;RR(RR((Rs;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs    !N(RRRRRRRRRRRRRRRRRRRRRR(((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyR's$   +         t SchemaDroppercBsDeZeddZdZdZdZdZdZ RS(cKsDtt|i||||_||_|i|_||_dS(N(RRRRRRRR(RRRRRR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs    cCs|io |i}n|ii}g}tti|D]!}|i|o ||q@q@~}|iio+x(|i|D]}|i |qWnx|D]}|i |qWdS(N( RRtreversedRRt _can_dropRRRtdrop_foreignkeyR(RRRR*R|RRRZ((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs  D cCsa|ii|i|io|ii|in|i p"|ii|i|id|iS(NR(RRRRRRR(RRZ((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs cCs@|id|ii|i|it|i|idS(Ns DROP INDEX (R3RRRRRR(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs2cCs@|id|ii|i|ii|f|idS(Ns!ALTER TABLE %s DROP CONSTRAINT %s(R3RRRZRR(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs c Csx(|idD]}|d||iqWx5|iD]*}|idj o|i|iq5q5W|id|ii||i x(|idD]}|d||iqWdS(Ns before-drops DROP TABLE s after-drop( RRRR"RRR3RRR(RRZRR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs  N( RRRRRRRRRR(((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs    tIdentifierPreparercBseZdZeZeZeZdde dZ dZ dZ dZdZdZdZed Zdd Zdd Zdd Zd ZeddZe dddZedZdZRS(s@Handle quoting and case-folding of identifiers based on options.t"cCs;||_||_|p|i|_||_h|_dS(siConstruct a new ``IdentifierPreparer`` object. initial_quote Character that begins a delimited identifier. final_quote Character that ends a delimited identifier. Defaults to `initial_quote`. omit_schema Prevent prepending schema name. Useful for databases that do not support schemae. N(Rt initial_quotet final_quotet omit_schemat_strings(RRRRR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRs    cCs|iddS(sEscape an identifier. Subclasses should override this to provide database-dependent escaping behavior. Rs""(R(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt_escape_identifier'scCs|iddS(sCanonicalize an escaped identifier. Subclasses should override this to provide database-dependent unescaping behavior that reverses _escape_identifier. s""R(R(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt_unescape_identifier0scCs|i|i||iS(s~Quote an identifier. Subclasses should override this to provide database-dependent quoting behavior. (RRR(RR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytquote_identifier9scCsW|i}||ijp;|ii|dp$|iit| p ||jS(s5Return True if the given identifier requires quoting.i(Rtreserved_wordstillegal_initial_characterstmatchtlegal_charactersR(RRtlc_value((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyt_requires_quotesBs  cCs|i||S(szQuote a schema. Subclasses should override this to provide database-dependent quoting behavior. (R(RRtforce((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRJscCs|djob||ijo |i|S|i|o|i||i||o7t|ddo$|i|i|id|}n|S(s'Prepare a quoted table and schema name.RRN(RRRRRRR(RRZRRR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyRss   %$cCs|djo |i}nt|dtpR|o4|i|idtd|d|i||iS|i||iSn1|o%|i|idtd|d|S|SdS(sPrepare a quoted column name.RRRRN(RRRRRRZR(RRt use_tableRt table_name((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyR}s  4%cCsk|i oF|o?t|ddo,|i|i|i|i|dtfS|i|dtfSdS(s(Format table name and schema as a tuple.RRN(RRRRRRR(RRZR((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytformat_table_seqs%c Csy |i}Wntj og}|i|i|i|ifD]}|ti|qD~\}}}tidh|d6|d6|d6}||_nXg}g} |i|D]\} } | | p| q~ D]} ||i | q~S(s:Unpack 'schema.table.column'-like strings into components.sM(?:(?:%(initial)s((?:%(escaped)s|[^%(final)s])+)%(final)s|([^\.]+))(?=\.|$))+tinitialtfinaltescaped( t_r_identifierstAttributeErrorRRRtreR{RtfindallR( Rt identifierstrR*RRRt escaped_finalRRtatbR2((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pytunformat_identifierss  ; N(RRRtRESERVED_WORDSR tLEGAL_CHARACTERSR tILLEGAL_INITIAL_CHARACTERSR RRRRRRRRRR4RRR\RRRRRR#(((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyR s(          (TRRRt sqlalchemyRRRRtsqlalchemy.sqlRRRRRRRVR$RtIR%R&tUNICODER RRtand_tor_tinvtaddtmulRtdivtmodttruedivtlttletnetgttgeteqt distinct_opt concat_opRtlike_opt notlike_optilike_opt notilike_opt between_optmatch_optin_optnotin_opRtdesc_optasc_optfrom_Rtexiststis_tisnotRRtcoalesceRRR R!R@RAtrandomRRURaRRt VisitableRRRtSchemaIteratorRRRtobjectR(((s;/usr/lib/python2.6/site-packages/sqlalchemy/sql/compiler.pyts""                                             3