Files
Home-AssistantConfig/deps/sqlalchemy/sql/__pycache__/compiler.cpython-34.pyc

534 lines
85 KiB
Plaintext
Raw Normal View History

2016-10-11 16:42:06 +00:00
<EFBFBD>
|<7C><><00>_@smdZddlZddlZddlmZmZmZmZmZm Z m
Z
m Z ddlm Z m Z ddlZeddd 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`dadbdcddg^<00>Zejdeej<00>Zedfdg<00>eddh<00>D<><00>jdig<00>Zejdjej<00>Zejdkej<00>Zidldm6dndo6dpdq6drds6dtdu6Zi!dvej6dwej6dxej6dyej6dzej6d{ej 6d|ej!6d{ej"6d}ej#6d~ej$6dej%6d<36>ej&6d<36>ej'6d<36>ej(6d<36>ej)6d<36>ej*6d<36>ej+6d<36>ej,6d<36>ej-6d<36>ej.6d<36>ej/6d<36>ej06d<36>ej16d<36>ej26d<36>ej36d<36>ej46d<36>ej56d<36>ej66d<36>ej76d<36>ej86d<36>ej96d<36>ej:6d<36>ej;6Z<i d<>ej=6d<36>ej>6d<36>ej?6d<36>ej@6d<36>ejA6d<36>ejB6d<36>ejC6d<36>ejD6d<36>ejE6d<36>ejF6d<36>ejG6ZHid<>d<>6d<36>d<>6d<36>d<>6d<36>d<>6d<36>d<>6d<36>d<>6d<36>d<>6d<36>d<>6d<36>d<>6d<36>d<>6d<36>d<>6d<36>d<>6d<36>d<>6d<36>d<>6d<36>d<>6ZIid<>e
jJjK6d<36>e
jJjL6d<36>e
jJjM6d<36>e
jJjN6d<36>e
jJjO6d<36>e
jJjP6ZQGd<47>d<><00>d<>eR<00>ZSGd<47>d<><00>d<>e jTe jUeR<00><00>ZVGd<47>d<><00>d<>ejW<00>ZXGd<47>d<><00>d<>eS<00>ZYGd<47>d<><00>d<>eS<00>ZZGd<47>d<><00>d<>eV<00>Z[Gd<47>d<><00>d<>eR<00>Z\dS)<29>a]Base SQL and DDL compiler implementations.
Classes provided include:
:class:`.compiler.SQLCompiler` - renders SQL
strings
:class:`.compiler.DDLCompiler` - renders DDL
(data definition language) strings
:class:`.compiler.GenericTypeCompiler` - renders
type specification strings.
To generate user-defined SQL strings, see
:doc:`/ext/compiler`.
<EFBFBD>N<>)<08>schema<6D>sqltypes<65> operators<72> functions<6E>visitors<72>elements<74>
selectable<EFBFBD>crud<75>)<02>util<69>exc<78>allZanalyseZanalyze<7A>and<6E>any<6E>array<61>asZascZ
asymmetric<EFBFBD> authorizationZbetween<65>binaryZbothZcase<73>cast<73>check<63>collate<74>column<6D>
constraint<EFBFBD>createZcross<73> current_dateZ current_role<6C> current_time<6D>current_timestamp<6D> current_user<65>default<6C>
deferrable<EFBFBD>descZdistinctZdo<64>else<73>end<6E>except<70>false<73>forZforeign<67>freeze<7A>from<6F>fullZgrant<6E>groupZhavingZilike<6B>in<69> initially<6C>innerZ intersectZinto<74>isZisnull<6C>join<69>leading<6E>leftZlike<6B>limit<69> localtime<6D>localtimestampZnatural<61>new<65>notZnotnull<6C>null<6C>off<66>offset<65>old<6C>on<6F>only<6C>or<6F>order<65>outer<65>overlapsZplacingZprimaryZ
references<EFBFBD>right<68>select<63> session_user<65>setZsimilarZsome<6D> symmetric<69>tableZthen<65>toZtrailing<6E>true<75>union<6F>unique<75>userZusing<6E>verbose<73>when<65>wherez ^[A-Z0-9_$]+$cCsg|]}t|<00><00>qS<>)<01>str)<02>.0<EFBFBD>xrOrO<00>=/tmp/pip-build-zkr322cu/sqlalchemy/sqlalchemy/sql/compiler.py<70>
<listcomp>5s rT<00>
<00>$z%(?<![:\w\$\x5c]):([\w\$]+)(?![:\w\$])z\x5c(:[\w\$]*)(?![:\w\$])z %%(%(name)s)sZpyformat<61>?Zqmarkz%%s<>formatz :[_POSITION]<5D>numericz :%(name)s<>namedz AND z OR z + z * z - z / z % <20>-z < z <= z != z > z >= z = z || z MATCH z NOT MATCH z IN z NOT IN z, z FROM z AS z IS z IS NOT z COLLATE zEXISTS z DISTINCT zNOT z DESCz ASCz NULLS FIRSTz NULLS LASTzcoalesce%(expr)sZ CURRENT_DATEZ CURRENT_TIMEZCURRENT_TIMESTAMPZ CURRENT_USERZ LOCALTIMEZLOCALTIMESTAMPzrandom%(expr)s<>sysdateZ SESSION_USER<45>USER<45>month<74>day<61>year<61>second<6E>hourZdoy<6F>minuteZquarterZdow<6F>week<65>epoch<63> milliseconds<64> microsecondsZ timezone_hourZtimezone_minute<74>UNIONz UNION ALL<4C>EXCEPTz
EXCEPT ALL<4C> INTERSECTz INTERSECT ALLc@s<>eZdZdZdZdej<00>dd<00>Zejdd<00>dd<00><00>Z d d
<00>Z
e d d <00><00>Z d d<00>Z dd<00>Zddd<00>Ze dd<00><00>Zdd<00>Zdd<00>ZdS)<19>CompiledaRepresent a compiled SQL or DDL expression.
The ``__str__`` method of the ``Compiled`` object should produce
the actual text of the statement. ``Compiled`` objects are
specific to their underlying database dialect, and also may
or may not be specific to the columns referenced within a
particular set of bind parameters. In no case should the
``Compiled`` object be dependent on the actual values of those
bind parameters, even though it may reference those values as
defaults.
NcCsR||_||_|dk rN||_|j|_|j|j|<00>|_ndS)a<>Construct a new ``Compiled`` object.
:param dialect: ``Dialect`` to compile against.
:param statement: ``ClauseElement`` to be compiled.
:param bind: Optional Engine or Connection to compile this
statement against.
:param compile_kwargs: additional kwargs that will be
passed to the initial call to :meth:`.Compiled.process`.
.. versionadded:: 0.8
N)<07>dialect<63>bind<6E> statementZsupports_executionZ can_execute<74>process<73>string)<05>selfrlrnrmZcompile_kwargsrOrOrS<00>__init__<5F>s      zCompiled.__init__z0.7z>:class:`.Compiled` objects now compile within the constructor.cCsdS)zDProduce the internal string representation of this element.
NrO)rqrOrOrS<00>compile<6C>szCompiled.compilecCs|j|||<00>S)N)<01>_execute_compiled)rq<00>
connection<EFBFBD> multiparams<6D>paramsrOrOrS<00>_execute_on_connection<6F>szCompiled._execute_on_connectioncCs t<00><00>dS)z<>Return a Compiled that is capable of processing SQL expressions.
If this compiler is one, it would likely just return 'self'.
N)<01>NotImplementedError)rqrOrOrS<00> sql_compiler<65>szCompiled.sql_compilercKs|j||<00>S)N)<01>_compiler_dispatch)rq<00>obj<62>kwargsrOrOrSro<00>szCompiled.processcCs |jp dS)z3Return the string text of the generated SQL or DDL.<2E>)rp)rqrOrOrS<00>__str__<5F>szCompiled.__str__cCs t<00><00>dS)z<>Return the bind params for this compiled object.
:param params: a dict of string/object pairs whose values will
override bind values compiled in to the
statement.
N)ry)rqrwrOrOrS<00>construct_params<6D>szCompiled.construct_paramscCs
|j<00>S)z0Return the bind params for this compiled object.)r<>)rqrOrOrSrw<00>szCompiled.paramscOs:|j}|dkr'tjd<00><00>n|j|||<00>S)zExecute this compiled object.Nz>This Compiled object is not bound to any Engine or Connection.)rmr ZUnboundExecutionErrorrt)rqrvrw<00>erOrOrS<00>execute<74>s
   zCompiled.executecOs|j||<00>j<00>S)zJExecute this compiled object and return the result's
scalar value.)r<><00>scalar)rqrvrwrOrOrSr<><00>szCompiled.scalar)<13>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__Z_cached_metadatar <00> immutabledictrrZ
deprecatedrsrx<00>propertyrzrorr<>rwr<>r<>rOrOrOrSrk<00>s  
 

rkc@s4eZdZdZdZdd<00>Zdd<00>ZdS)<08> TypeCompilerz2Produces DDL specification for TypeEngine objects.z visit_\w+cCs ||_dS)N)rl)rqrlrOrOrSrrszTypeCompiler.__init__cKs|j||<00>S)N)r{)rq<00>type_<65>kwrOrOrSroszTypeCompiler.processN)r<>r<>r<>r<>Z ensure_kwargrrrorOrOrOrSr<><00>s  r<>c@sUeZdZdZdZd Zfdd<00>Zedd<00><00>Zed d
<00><00>Z d S) <0A> _CompileLabelz;lightweight label object which acts as an expression.Label.<2E>label<65>element<6E>namecCs&||_||_|f||_dS)N)r<>r<><00>
_alt_names)rq<00>colr<6C><00> alt_namesrOrOrSrrs  z_CompileLabel.__init__cCs
|jjS)N)r<><00> proxy_set)rqrOrOrSr<>sz_CompileLabel.proxy_setcCs
|jjS)N)r<><00>type)rqrOrOrSr<>sz_CompileLabel.typeN)zelementzname)
r<EFBFBD>r<>r<>r<>Z__visit_name__<5F> __slots__rrr<>r<>r<>rOrOrOrSr<>s r<>c@sNeZdZdZeZeZdZZ Z
dZ dZ dZ dZdZdddd<00>Zejdd<00><00>Zejdd <00><00>Zd
d <00>Zejd d <00><00>Zdd<00>Zedd<00><00>Zddddd<00>Zedd<00><00>Zejd<00>dd<00><00>Z dd<00>Z!ddd<00>Z"ddd<00>Z#dd d!<00>Z$ddddd"d#<00>Z%ddd$d%<00>Z&d&d'<00>Z'd(d)<00>Z(d*d+<00>Z)d,d-<00>Z*d.d/<00>Z+d0d1<00>Z,dddd2d3<00>Z-d4d5<00>Z.d6d7<00>Z/d8d9<00>Z0d:d;<00>Z1d<d=<00>Z2d>d?<00>Z3d@dA<00>Z4dBdC<00>Z5dDdE<00>Z6ddFdG<00>Z7dHdI<00>Z8dJdK<00>Z9dLdM<00>Z:dddNdOdP<00>Z;dQdR<00>Z<dSdT<00>Z=dUdV<00>Z>dWdX<00>Z?ddYdZ<00>Z@d[d\<00>ZAd]d^<00>ZBd_d`<00>ZCdadb<00>ZDdcdd<00>ZEdedf<00>ZFejdgdh<00><00>ZGdidj<00>ZHdkdl<00>ZIdmdn<00>ZJdodp<00>ZKdqdr<00>ZLdsdt<00>ZMdudv<00>ZNdwdx<00>ZOdydz<00>ZPd{d|<00>ZQd}d~<00>ZRdd<><00>ZSdddd<>d<><00>ZTd<>d<><00>ZUd<>d<><00>ZVd<>d<><00>ZWd<>d<><00>ZXd<>d<><00>ZYd<>d<><00>ZZdd<>d<><00>Z[dddd<>d<><00>Z\ddddd<>d<><00>Z]d<>d<><00>Z^d<>d<><00>Z_ddd<>d<><00>Z`d<>d<><00>Zad<>d<><00>Zbd<>d<><00>Zcd<>d<><00>Zdd<>d<><00>Zed<>d<><00>Zfd<>d<><00>Zgejhd<>ei<00>fd<>ei<00>fg<00>Zjd<>d<><00>ZkddddNddd<>d<><00>Zld<>d<><00>Zmd<>d<><00>Znd<>d<><00>Zod<>d<><00>Zpd<>d<><00>Zqd<>d<><00>Zrd<>d<><00>Zsd<>d<><00>Ztd<>d<><00>Zud<>d<><00>Zvd<>d<><00>Zwd<>d<><00>Zxdddddd<>d<><00>Zydd<>d<><00>Zzd<>d<><00>Z{d<>d<><00>Z|d<>d<><00>Z}d<>d<><00>Z~d<>d<><00>Zejd<>d<><00><00>Z<>d<>d<><00>Z<>d<>d<><00>Z<>d<>d<><00>Z<>d<>d<><00>Z<>dS)<29><> SQLCompilerz<72>Default implementation of Compiled.
Compiles ClauseElements into SQL strings. Uses a similar visit
paradigm as visitors.ClauseVisitor but implements its own traversal.
FNcKs||_|pt|dd<00>|_i|_tj<00>|_g|_g|_d|_ |j
|_
|j
rxg|_ nt |j |_d|_|j|_|jp<>|j|_tj|j<00>|_i|_tj||||<00>|j
r |j dkr |j<00>ndS)aConstruct 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.
<20>inlineFTNrY)<1B> column_keys<79>getattrr<72><00>bindsr Z column_dict<63>
bind_names<EFBFBD>stack<63>_result_columns<6E>_ordered_columns<6E>
positional<EFBFBD> positiontup<75>BIND_TEMPLATESZ
paramstyle<EFBFBD> bindtemplate<74>ctes<65>identifier_preparer<65>preparer<65> label_length<74>max_identifier_lengthZ PopulateDict<63> _process_anon<6F>anon_map<61>truncated_namesrkrr<00>_apply_numbered_params)rqrlrnr<>r<>r}rOrOrSrrLs(             zSQLCompiler.__init__cCs:tj<00>|_i|_d|_|jr6i|_ndS)z<>Initialize collections related to CTEs only if
a CTE is located, to save on the overhead of
these collections otherwise.
FN)r <00> OrderedDictr<74><00> ctes_by_name<6D>ctes_recursiver<65><00>cte_positional)rqrOrOrS<00>_init_cte_state<74>s
   zSQLCompiler._init_cte_statec cs<>|j|j}}gd|_|_z>|jrL|jd}d|d<nd}|j|jfVWd|r}|jd<00>n|||_|_XdS)z;special API to support the use case of 'nested result sets'FrT<>need_result_map_for_nestedN<64><4E><EFBFBD><EFBFBD><EFBFBD>)r<>r<>r<><00>pop)rqZresult_columnsZordered_columns<6E>entryrOrOrS<00>_nested_result<6C>s   zSQLCompiler._nested_resultcs:tjd<00><00>tjd<00>fdd<00>|j<00>|_dS)Nrz \[_POSITION\]csttj<00><00><00>S)N)rPr <00>next)<01>m)<01>poscountrOrS<00><lambda><3E>sz4SQLCompiler._apply_numbered_params.<locals>.<lambda>)<05> itertools<6C>count<6E>re<72>subrp)rqrO)r<>rSr<><00>s
z"SQLCompiler._apply_numbered_paramscs-tdd<00><00>fdd<00><00>jD<>D<><00>S)Ncss-|]#\}}|dk r||fVqdS)NrO)rQ<00>key<65>valuerOrOrS<00> <genexpr><3E>s z/SQLCompiler._bind_processors.<locals>.<genexpr>c3s1|]'}<00>j||jj<00>j<00>fVqdS)N)r<>r<>Z_cached_bind_processorrl)rQ<00> bindparam)rqrOrSr<><00>s)<02>dictr<74>)rqrO)rqrS<00>_bind_processors<72>s zSQLCompiler._bind_processorscCst|j<00>dkS)Nr)<02>lenr<6E>)rqrOrOrS<00> is_subquery<72>szSQLCompiler.is_subquerycCs|S)NrO)rqrOrOrSrz<00>szSQLCompiler.sql_compilerTcCs<>|r<>i}x<>|jD]<5D>}|j|}|j|krL||j||<q||kri||||<q|r<>|jr<>|r<>tjd|j|f<16><00>q<>tjd|j<16><00>q|jr<>|j||<q|j||<qW|Si}x<>|jD]<5D>}|rG|jrG|r.tjd|j|f<16><00>qGtjd|j<16><00>n|jrg|j||j|<q<>|j||j|<q<>W|SdS)z5return a dictionary of bind parameter keys and valuesz@A value is required for bind parameter %r, in parameter group %dz)A value is required for bind parameter %rN)r<>r<><00>requiredr ZInvalidRequestError<6F>callable<6C>effective_valuer<65>)rqrwZ _group_number<65>_check<63>pdr<64>r<>rOrOrSr<><00>sD    zSQLCompiler.construct_paramscCs|jdd<00>S)zoReturn the bind param dictionary embedded into this
compiled object, for those values that are present.r<>F)r<>)rqrOrOrSrw<00>szSQLCompiler.paramszsqlalchemy.engine.resultcCs|jj|j<00>S)z(utility method used for unit tests only.)ZResultMetaData<74>_create_result_mapr<70>)rq<00>resultrOrOrSr<>szSQLCompiler._create_result_mapcCsdS)z<>Called when a SELECT statement has no froms, and no FROM clause is
to be appended.
Gives Oracle a chance to tack on a ``FROM DUAL`` to the string output.
r~rO)rqrOrOrS<00> default_fromszSQLCompiler.default_fromcKsd|jj||<00>dS)N<>(<28>))r<>r{)rq<00>grouping<6E>asfromr}rOrOrS<00>visit_groupingszSQLCompiler.visit_groupingc Ks<>|jr<>|jjr<>|jdd}|j\}}|rD|}n|}|jj}|dk r<>|j|kr<>|jj|d<q<>n|j|jd||<00>S)Nrr <00>render_label_as_label<65>within_columns_clauser<65>)r<>rlZsupports_simple_order_by_label<65>_label_resolve_dictr<74>Z_order_by_label_elementr<74>ro) rqr<>r<>r}r <00> with_cols<6C>
only_fromsZ resolve_dictZ order_by_elemrOrOrS<00>visit_label_references    z!SQLCompiler.visit_label_referencec Ks<>|js|j|j<00>S|jdd}|j\}}y'|rR||j}n ||j}Wn>tk
r<>tjdtj|j<00><00>|j|j<00>SYn!X||d<|j|d||<00>SdS)Nrr z6Can't resolve label reference %r; converting to text()r<>r<>r<>) r<>roZ _text_clauser<65>r<><00>KeyErrorr Z warn_limitedZellipses_string)rqr<>r<>r}r r<>r<>r<>rOrOrS<00>visit_textual_label_reference,s$ 
 
z)SQLCompiler.visit_textual_label_referencec
Ks |o
| }||k}|s%|r^t|jtj<00>rR|jd|j<00>} q^|j} n|r<>|dk r<>|| |j|| f|j|j<00>n|jj|dddd|<00>t t
j |j j || <00>S|r<>|j j || <00>S|jj|dd|<00>SdS)N<>colidentr<74>T<>within_label_clauseF)<0E>
isinstancer<EFBFBD>r<00>_truncated_label<65>_truncated_identifierr<72>r<>r<>r{<00> OPERATORSr<00>as_r<5F><00> format_label)
rqr<><00>add_to_result_mapr<70>r<>r<>r<>Zrender_label_with_asZrender_label_onlyZ labelnamerOrOrS<00> visit_labelHs(      ) zSQLCompiler.visit_labelc Ksb|j}}|dkr+tjd<00><00>n|j}| rbt|tj<00>rb|jd|<00>}n|dk r<>||||||jf|j <00>n|r<>|j
|<00>}n|j j |<00>}|j }|dks<>| s<>|j r<>|S|jr |j j|j<00>d} nd} |j}
t|
tj<00>rB|jd|
<00>}
n| |j j |
<00>d|SdS)Nz:Cannot compile Column object until its 'name' is assigned.r<><00>.r~<00>alias)r<>r <00> CompileError<6F>
is_literalr<EFBFBD>rr<>r<>r<>r<><00>escape_literal_columnr<6E><00>quoterFZnamed_with_columnr<00> quote_schema) rqrr<><00> include_tabler}r<>Z orig_namer<65>rFZ schema_prefixZ tablenamerOrOrS<00> visit_columnos2        zSQLCompiler.visit_columncCs|jdd<00>S)z4provide escaping for the literal_column() construct.<2E>%z%%)<01>replace)rq<00>textrOrOrSr<><00>sz!SQLCompiler.escape_literal_columncKs|jS)N)r<>)rqZ
fromclauser}rOrOrS<00>visit_fromclause<73>szSQLCompiler.visit_fromclausecKs|jS)N)r<>)rq<00>indexr}rOrOrS<00> visit_index<65>szSQLCompiler.visit_indexcKs#||d<|jjj|j|<00>S)N<>type_expression)rl<00> type_compilerror<>)rq<00>
typeclauser<EFBFBD>rOrOrS<00>visit_typeclause<73>s
zSQLCompiler.visit_typeclausecCs|S)NrO)rqr<>rOrOrS<00>post_process_text<78>szSQLCompiler.post_process_textc s[<00><00><00>fdd<00>}<00>js-d<00>_ntjdd<00>tj|<00>j<00>j<00><00><00>S)NcsI|jd<00>}|<00>jkr5<00>j<00>j|<19><00>S<>j|<00><00>SdS)Nr)r*Z _bindparamsro<00>bindparam_string)r<>r<>)r<>rq<00>
textclauserOrS<00> do_bindparam<61>sz2SQLCompiler.visit_textclause.<locals>.do_bindparamTcSs |jd<00>S)Nr)r*)r<>rOrOrSr<><00>sz.SQLCompiler.visit_textclause.<locals>.<lambda>)r<><00> isplaintext<78>BIND_PARAMS_ESCr<43><00> BIND_PARAMSr<53>r<>)rqr<>r<>r<>rO)r<>rqr<>rS<00>visit_textclause<73>s   zSQLCompiler.visit_textclausec Ks<>|j }|r|jn
|jd
}|pY|dkrJ|jdd<00>pY|jdd<00>}|r<>d|_x0|jD]"} |j| ddd|j<00>quWn|j|j|<00>}
|r<>|r<>d |
}
n|
S) Nrr<00>need_result_map_for_compoundFr<46>r<>Tr<54>z(%s)r<>)r<><00>_default_stack_entry<72>getr<74>Z column_argsro<00>_add_to_result_mapr<70>) rqZtaf<61>compound_indexr<78><00>parensr<73><00>toplevelr<6C><00>populate_result_map<61>cr<63>rOrOrS<00>visit_text_as_from<6F>s
    zSQLCompiler.visit_text_as_fromcKsdS)NZNULLrO)rq<00>exprr<72>rOrOrS<00>
visit_null<EFBFBD>szSQLCompiler.visit_nullcKs|jjrdSdSdS)NrH<00>1)rl<00>supports_native_boolean)rqr r<>rOrOrS<00>
visit_true<EFBFBD>s zSQLCompiler.visit_truecKs|jjrdSdSdS)Nr%<00>0)rlr)rqr r<>rOrOrS<00> visit_false<73>s zSQLCompiler.visit_falsec s^|j}|dkrd}n t|j}|jdd<00><00><00>fdd<00>|jD<>D<><00>S)N<> css|]}|r|VqdS)NrO)rQ<00>srOrOrSr<><00>sz/SQLCompiler.visit_clauselist.<locals>.<genexpr>c3s!|]}|j<00><00><00>VqdS)N)r{)rQr )r<>rqrOrSr<><00>s)<04>operatorr<72>r/<00>clauses)rqZ
clauselistr<EFBFBD><00>seprO)r<>rqrS<00>visit_clauselist<73>s     zSQLCompiler.visit_clauselistcKs<>d}|jdk r5||jj||<00>d7}nxI|jD]>\}}|d|j||<00>d|j||<00>d7}q?W|jdk r<>|d|jj||<00>d7}n|d7}|S)NzCASE rzWHEN z THEN zELSE ZEND)r<>r{ZwhensZelse_)rq<00>clauser}rRZcondr<64>rOrOrS<00>
visit_case<EFBFBD>s 3!
zSQLCompiler.visit_casecKs,d|jj||<00>|jj||<00>fS)NzCAST(%s AS %s))rr{r<>)rqrr}rOrOrS<00>
visit_castszSQLCompiler.visit_castc sTd|jj<00><00><00>dj<00><00>fdd<00>d|jfd|jffD<><00>fS)Nz %s OVER (%s)rc3sI|]?\}}|dk rt|<00>rd||j<00><00><00>fVqdS)Nz%s BY %s)r<>r{)rQ<00>wordr)r}rqrOrSr<> s z)SQLCompiler.visit_over.<locals>.<genexpr>Z PARTITIONZORDER)<05>funcr{r/Z partition_by<62>order_by)rqZoverr}rO)r}rqrS<00>
visit_overs  zSQLCompiler.visit_overcKs,d|jj||<00>|jj||<00>fS)Nz%s FILTER (WHERE %s))rr{Z criterion)rqZ
funcfilterr}rOrOrS<00>visit_funcfilterszSQLCompiler.visit_funcfiltercKs8|jj|j|j<00>}d||jj||<00>fS)NzEXTRACT(%s FROM %s))<05> extract_mapr<00>fieldr r{)rq<00>extractr}r!rOrOrS<00> visit_extractszSQLCompiler.visit_extractcKs<>|dk r+||j|jf|j<00>nt|d|jj<00>d<00>}|r]|||<00>Stj|j|jd<17>}djt|j <00>|g<17>i|j
||<00>d6SdS)Nz visit_%s_funcz%(expr)sr<73>r ) r<>r<>r<><00>lower<65> FUNCTIONSr<00> __class__r/<00>listZ packagenames<65>function_argspec)rqrr<>r}<00>dispr<70>rOrOrS<00>visit_functions  zSQLCompiler.visit_functioncKs|j|j<00>S)N)<02>visit_sequence<63>sequence)rqZ
next_valuer<EFBFBD>rOrOrS<00>visit_next_value_func-sz!SQLCompiler.visit_next_value_funccCstd|jj<16><00>dS)Nz2Dialect '%s' does not support sequence increments.)ryrlr<>)rqr,rOrOrSr+0szSQLCompiler.visit_sequencecKs|jj||<00>S)N)Z clause_exprr{)rqrr}rOrOrSr(6szSQLCompiler.function_argspecrc  s<><00>j }|r<00>jn
<00>jd}|pG|dkoG|jdd<00>}<00>jji|dd6|dd6|d6|d6<><01>jj|j<00>} d| dj<00><00><00>fd d
<00>t|j<00>D<><00>}
|j j
<00>d <00><00><00>} | r<>|
d | 7}
n|
<00>j |<00><00>7}
|
|j dk s5|j dk rG<01>j|<00><00>pJd 7}
<00>jrp|rp<01>j<00>|
}
n<00>jjd<00><01>r<>|r<>d|
dS|
SdS)NrrrF<>correlate_froms<6D> asfrom_fromsr rc
3s9|]/\}}|j<00>d<00>ddd|<00><00>VqdS)r<>rFrN)r{)rQ<00>ir )r<>r}rqrOrSr<>Lsz4SQLCompiler.visit_compound_select.<locals>.<genexpr>r<>z
GROUP BY r~r<>r<>r<>r<>)r<>rr<00>append<6E>compound_keywords<64>keywordr/<00> enumerate<74>selects<74>_group_by_clauser{<00>order_by_clause<73> _limit_clause<73>_offset_clause<73> limit_clauser<65><00>_render_cte_clauser<65>) rq<00>csr<73>rrr}rr<>Zneed_result_mapr3r<><00>group_byrO)r<>r}rqrS<00>visit_compound_select9s:
        z!SQLCompiler.visit_compound_selectcKs<>|jrv|jr$tjd<00><00>nt|d|jjd<00>}|rY|||j|<00>S|j|t|j|<00>Snj|jr<>t|d|jjd<00>}|r<>|||j|<00>S|j|t|j|<00>Sntjd<00><00>dS)NzFUnary expression does not support operator and modifier simultaneouslyzvisit_%s_unary_operatorzvisit_%s_unary_modifierz,Unary expression has no operator or modifier) r<00>modifierr r<>r<>r<><00> _generate_generic_unary_operatorr<72><00> _generate_generic_unary_modifier)rq<00>unaryr<79>r)rOrOrS<00> visit_unaryes&      zSQLCompiler.visit_unarycKs:|jjr|j|j|<00>Sd|j|j|<00>SdS)Nz%s = 1)rlrror<>)rqr<>rr<>rOrOrS<00>visit_istrue_unary_operator~s z'SQLCompiler.visit_istrue_unary_operatorcKs>|jjr#d|j|j|<00>Sd|j|j|<00>SdS)NzNOT %sz%s = 0)rlrror<>)rqr<>rr<>rOrOrS<00>visit_isfalse_unary_operator<6F>s z(SQLCompiler.visit_isfalse_unary_operatorcKsd|j|dtj<00>S)NzNOT %s<>override_operator)<03> visit_binaryr<00>match_op)rqrrr<>rOrOrS<00>visit_notmatch_op_binary<72>s z$SQLCompiler.visit_notmatch_op_binaryc Ks<>|jr@t|jtj<00>r@t|jtj<00>r@d|d<n|pL|j}t|d|jd<00>}|r~||||<00>Syt |}Wn$t
k
r<>t j ||<00><00>YnX|j |||<00>SdS)NT<4E> literal_bindszvisit_%s_binary)<0E>ansi_bind_rulesr<73>r1rZ BindParameterrArr<>r<>r<>r<>r ZUnsupportedCompilationError<6F>_generate_generic_binary)rqrrFr<>Z operator_r)<00>opstringrOrOrSrG<00>s   zSQLCompiler.visit_binarycKs|j|d|jd|<00>S)Nr)rLrM)rqr<>rr<>rOrOrS<00>visit_custom_op_binary<72>sz"SQLCompiler.visit_custom_op_binarycKs|j||jd|<00>S)Nr)r@rM)rqr<>rr<>rOrOrS<00>visit_custom_op_unary_operator<6F>sz*SQLCompiler.visit_custom_op_unary_operatorcKs|j|d|j|<00>S)Nr)rArM)rqr<>rr<>rOrOrS<00>visit_custom_op_unary_modifier<65>sz*SQLCompiler.visit_custom_op_unary_modifiercKs*|jj||<00>||jj||<00>S)N)r1r{rA)rqrrMr<>rOrOrSrL<00>sz$SQLCompiler._generate_generic_binarycKs||jj||<00>S)N)r<>r{)rqrBrMr<>rOrOrSr@<00>sz,SQLCompiler._generate_generic_unary_operatorcKs|jj||<00>|S)N)r<>r{)rqrBrMr<>rOrOrSrA<00>sz,SQLCompiler._generate_generic_unary_modifiercCstjddtj<00>S)Nz'%'r<>)rZliteral_columnr<00>
STRINGTYPE)rqrOrOrS<00>_like_percent_literal<61>sz!SQLCompiler._like_percent_literalcKsF|j<00>}|j}|j|j<00>j|<00>|_|j|||<00>S)N)<05>_clonerR<00>__add__rA<00>visit_like_op_binary)rqrrr<><00>percentrOrOrS<00>visit_contains_op_binary<72>s  z$SQLCompiler.visit_contains_op_binarycKsF|j<00>}|j}|j|j<00>j|<00>|_|j|||<00>S)N)rSrRrTrA<00>visit_notlike_op_binary)rqrrr<>rVrOrOrS<00>visit_notcontains_op_binary<72>s  z'SQLCompiler.visit_notcontains_op_binarycKs=|j<00>}|j}|j|j<00>|_|j|||<00>S)N)rSrR<00>__radd__rArU)rqrrr<>rVrOrOrS<00>visit_startswith_op_binary<72>s
  z&SQLCompiler.visit_startswith_op_binarycKs=|j<00>}|j}|j|j<00>|_|j|||<00>S)N)rSrRrZrArX)rqrrr<>rVrOrOrS<00>visit_notstartswith_op_binary<72>s
  z)SQLCompiler.visit_notstartswith_op_binarycKs=|j<00>}|j}|j|j<00>|_|j|||<00>S)N)rSrRrTrArU)rqrrr<>rVrOrOrS<00>visit_endswith_op_binary<72>s  z$SQLCompiler.visit_endswith_op_binarycKs=|j<00>}|j}|j|j<00>|_|j|||<00>S)N)rSrRrTrArX)rqrrr<>rVrOrOrS<00>visit_notendswith_op_binary<72>s  z'SQLCompiler.visit_notendswith_op_binarycKsd|jjdd<00>}d|jj||<00>|jj||<00>f|r_d|j|tj<00>ndS)N<>escapez
%s LIKE %sz ESCAPE r~)<08> modifiersrr1r{rA<00>render_literal_valuerrQ)rqrrr<>r_rOrOrSrU<00>s
z SQLCompiler.visit_like_op_binarycKsd|jjdd<00>}d|jj||<00>|jj||<00>f|r_d|j|tj<00>ndS)Nr_z%s NOT LIKE %sz ESCAPE r~)r`rr1r{rArarrQ)rqrrr<>r_rOrOrSrX<00>s
z#SQLCompiler.visit_notlike_op_binarycKsd|jjdd<00>}d|jj||<00>|jj||<00>f|r_d|j|tj<00>ndS)Nr_zlower(%s) LIKE lower(%s)z ESCAPE r~)r`rr1r{rArarrQ)rqrrr<>r_rOrOrS<00>visit_ilike_op_binary<72>s
z!SQLCompiler.visit_ilike_op_binarycKsd|jjdd<00>}d|jj||<00>|jj||<00>f|r_d|j|tj<00>ndS)Nr_zlower(%s) NOT LIKE lower(%s)z ESCAPE r~)r`rr1r{rArarrQ)rqrrr<>r_rOrOrS<00>visit_notilike_op_binarys
z$SQLCompiler.visit_notilike_op_binarycKs4|jjdd<00>}|j||r*dnd|<00>S)NrEFz BETWEEN SYMMETRIC z BETWEEN )r`rrL)rqrrr<>rErOrOrS<00>visit_between_op_binarysz#SQLCompiler.visit_between_op_binarycKs4|jjdd<00>}|j||r*dnd|<00>S)NrEFz NOT BETWEEN SYMMETRIC z NOT BETWEEN )r`rrL)rqrrr<>rErOrOrS<00>visit_notbetween_op_binarysz&SQLCompiler.visit_notbetween_op_binaryc Ksw| r8|jjr8|jj|<00>}|j|dd<00>S|sM|r<>|jr<>|jdkr<>|jdkr<>tjd|j <16><00>n|j
|dd|<00>S|j |<00>}||j krL|j |}||k rL|j s<>|j r|jj|j<00> rtjd|j <16><00>qI|js$|jrItjd|j |j f<16><00>qIqLn||j |j <|j |<|j||<00>S)N<>skip_bind_expressionTz@Bind parameter '%s' without a renderable value not allowed here.r<>zIBind parameter '%s' conflicts with unique bind parameter of the same namez<65>bindparam() name '%s' is reserved for automatic usage in the VALUES or SET clause of this insert/update statement. Please use a name other than column name when using bindparam() with insert() or update() (for example, 'b_%s').)r<>Z_has_bind_expression<6F>bind_expressionrorKr<>r<>r r<>r<><00>render_literal_bindparam<61>_truncate_bindparamr<6D>rJr<><00> intersectionZ_is_crudr<64>) rqr<>r<>rJrfr}rgr<><00>existingrOrOrS<00>visit_bindparams8       zSQLCompiler.visit_bindparamcKs|j}|j||j<00>S)N)r<>rar<>)rqr<>r<>r<>rOrOrSrhMs z$SQLCompiler.render_literal_bindparamcCs6|j|j<00>}|r"||<00>Std|<16><00>dS)aRender the value of a bind parameter as a quoted literal.
This is used for statement sections that do not accept bind parameters
on the target driver/database.
This should be implemented by subclasses using the quoting services
of the DBAPI.
z(Don't know how to literal-quote value %rN)Z_cached_literal_processorrlry)rqr<>r<><00> processorrOrOrSraQs

z SQLCompiler.render_literal_valuecCs[||jkr|j|S|j}t|tj<00>rJ|jd|<00>}n||j|<|S)Nr<4E>)r<>r<>r<>rr<>r<>)rqr<>Z bind_namerOrOrSrics   zSQLCompiler._truncate_bindparamcCs<>||f|jkr&|j||fS|j|j<00>}t|<00>|jdkr<>|jj|d<00>}|dt|jdd<00><00>dt|<00>dd<00>}|d|j|<n|}||j||f<|S)N<>rr<00>_r )r<>Z apply_mapr<70>r<>r<>r<00>max<61>hex)rqZ ident_classr<73>Zanonname<6D>counterZ truncnamerOrOrSr<>ps8z!SQLCompiler._truncated_identifiercCs ||jS)N)r<>)rqr<>rOrOrS<00>
_anonymize<EFBFBD>szSQLCompiler._anonymizecCsP|jdd<00>\}}|jj|d<00>}|d|j|<|dt|<00>S)Nrrro)<04>splitr<74>rrP)rqr<><00>identZderivedZanonymous_counterrOrOrSr<><00>szSQLCompiler._process_anoncKsJ|jr8|dk r%|j|<00>q8|jj|<00>n|ji|d6S)Nr<4E>)r<>r1r<>r<>)rqr<><00>positional_namesr<73>rOrOrSr<><00>s
  zSQLCompiler.bindparam_stringc  s<00>j<00>t|jtj<00>r7<00>jd|j<00>}n |j}|<00>jkr<><00>j|}||jksw||kr<><00>jj ||<00>S||jkr<><00>j
|=q<>t j d|<16><00>n|<00>j|<|j dk r9|j }|<00>j
kr<01>j||<00>n|j j} t| tj<00>rE<01>jd| <00>} qEn |}d} | r<>|<00>j
kr<>|jrpd<00>_n<00>jj ||<00>}
|jr/t|jtj<00>r<>|j} n4t|jtj<00>r<>|jjd} n ds<>t<00>dd<00>tj| j<00>D<>} |
dd j<00>fd
d <00>| D<><00>7}
n<00>jrPg|d <<3C>j|<n|
d |jj<00>dd|<00>7}
|jr<>|
d<00>j||j|<00>7}
n|
<00>j
|<n|r<>| r<><02>jj || <00>}
|
<00>j |<00>7}
n<00>jj ||<00>S|
SdS)Nr<4E>z5Multiple, unrelated CTEs found with the same name: %rTrFcSs"g|]}|dk r|<00>qS)NrO)rQr rOrOrSrT<00>s z)SQLCompiler.visit_cte.<locals>.<listcomp>z(%s)z, c3s!|]}<00>jj|<00>VqdS)N)r<><00> format_column)rQru)rqrOrSr<><00>sz(SQLCompiler.visit_cte.<locals>.<genexpr>rvz AS
r<EFBFBD>r)!r<>r<>r<>rr<>r<>r<>Z _restatesr<73><00> format_aliasr<73>r r<>Z
_cte_alias<EFBFBD> visit_cte<74> recursiver<65><00>originalr <00>Select<63>CompoundSelectr5<00>AssertionErrorr Z unique_list<73> inner_columnsr/r<>r<>r{<00> _suffixes<65>_generate_prefixes<65>get_render_as_alias_suffix) rq<00>cter<65><00>ashint<6E> fromhintsr}Zcte_nameZ existing_cteZorig_cteZcte_alias_namer<65>Z
col_sourceZ
recur_colsrO)rqrSry<00>sl
                  zSQLCompiler.visit_ctec Ks<>|s |rEt|jtj<00>r9|jd|j<00>}qE|j}n|r^|jj||<00>S|r<>|jj|dd|<00>|j |jj||<00><00>}|r<>||kr<>|j
|||||<00>}n|S|jj||<00>SdS)Nr<4E>r<>T) r<>r<>rr<>r<>r<>rxr{r{r<><00>format_from_hint_text) rqr<>r<>r<><00>iscrudr<64>r}Z
alias_name<EFBFBD>retrOrOrS<00> visit_alias<61>s     zSQLCompiler.visit_aliascCsd|S)Nz AS rO)rqZalias_name_textrOrOrSr<><00>sz&SQLCompiler.get_render_as_alias_suffixcCs |jj||||f<00>dS)N)r<>r1)rq<00>keynamer<65><00>objectsr<73>rOrOrSr<00>szSQLCompiler._add_to_result_mapc s<00>jjr<|r<<00>jj<00><00>}<00><00>fdd<00>} n<00>}|rT<00>j} nd} |si|}
n<>t<00>tj<00>r<>|<00>k r<>t|<00>jd<00>j f<00>}
q<>|}
nC|dk r<>|r<>t||d<00>j
f<00>}
n|rRt<00>tj <00>rR<01>j rR<01>j dk rRt<00>j tj<00> rRt|tj<00>j<00>d<00>jf<00>}
n<>t<00>tj<00> r<>t<00>tj<00> s<><01>jr<>t<00>d<00> s<>t<00>tj<00>r<>t|<00>j<00>}
n<|<00>k r<>t|tj<00>j<00>d<00>jf<00>}
n|}
|jd|d| <00>|
j<00>|<00>S)z.produce labeled columns present in a select().cs<00>j|||<00>f|<00>S)N)r)r<>r<>r<>r<>)rrqrOrSr<> sz2SQLCompiler._label_select_column.<locals>.<lambda>Nr<4E>r<>r<>r<>)r<>Z_has_column_expressionZcolumn_expressionrr<>rZLabelr<6C>r<>r<><00>
_key_labelZ ColumnClauser<65>rFr r|Z _as_truncatedr<64>Z
TextClauseZUnaryExpressionZwraps_column_expression<6F>hasattrrZFunctionZ
anon_label<EFBFBD>updater{) rqrBrrr<><00>column_clause_argsr<73>r<>Zcol_exprr<72>Z result_exprrO)rrqrS<00>_label_select_columns^      
   z SQLCompiler._label_select_columncCs-|j||<00>}|r)|d|7}n|S)Nr)<01>get_from_hint_text)rq<00>sqltextrFZhintr<74><00>hinttextrOrOrSr<>Psz!SQLCompiler.format_from_hint_textcCsdS)NrO)rqZbyfromsrOrOrS<00>get_select_hint_textVsz SQLCompiler.get_select_hint_textcCsdS)NrO)rqrFr<>rOrOrSr<>YszSQLCompiler.get_from_hint_textcCsdS)NrO)rqrFr<>rOrOrS<00>get_crud_hint_text\szSQLCompiler.get_crud_hint_textcCs dj|<00>S)Nr)r/)rqZ
hint_textsrOrOrS<00>get_statement_hint_text_sz#SQLCompiler.get_statement_hint_textcs1i<00>ig<00><00><00><00>fdd<00><00><00>|<00>S)z<>Rewrite any "a JOIN (b JOIN c)" expression as
"a JOIN (select * from b JOIN c) AS anon", to support
databases that can't parse a parenthesized join correctly
(i.e. sqlite the main one).
c
sz|<00>dkr<00>d |S|<00>kr0<00>|S|j<00>}<00>|<|jr<>|jr<>t|jtj<00>r<>|j<00><01>|j|<00>|_<00>|j|<00>}tj |j
gdd<00>j <00>}x)|j D]}|j |_|j|_q<>Wtt|jj
j |j <00><00>}|||j
j<|||j
j<|||jj
j<|||jj
j<xEt<00>d
j<00><00>D]-\}}||krg||<19>d |<qgqgW<>d j|<00>||_<00>|j|<00>|_n<>|jr<>d|d<|jd<00>|<00>n<>|jrc|jrc|jdd<00>dk} | r3<02>ji<00>nd|d<|jd<00>|<00>| rv<02>d =qvn|jd<00>|<00>|S)Nr<00>
use_labelsTZselect_containerZtransform_clue<75>cloneZ inside_selectr<74>r<>r<>r<>r<>r<>)rSZ is_selectableZ_is_joinr<6E>rAr Z FromGroupingZ_reset_exportedr1r|r<>r<>r r<>r<>r<>Z_labelr<6C><00>zipr'<00>itemsr<73><00>onclauseZ_is_from_containerZ_copy_internalsZ
_is_selectrr1)
r<EFBFBD>r<>ZnewelemrAZ selectable_r Ztranslate_dict<63>k<>vZbarrier_select)<03>cloned<65>column_translate<74>visitrOrSr<>lsP  
! #   
 
 z=SQLCompiler._transform_select_for_nested_joins.<locals>.visitrO)rqrBrO)r<>r<>r<>rS<00>"_transform_select_for_nested_joinsbs Mz.SQLCompiler._transform_select_for_nested_joinscsatdd<00>|jD<><00><00>t<00>fdd<00>|jD<><00><00><00>fdd<00>|jD<>|_dS)Ncss|]}|j|fVqdS)N)r<>)rQr rOrOrSr<><00>szESQLCompiler._transform_result_map_for_nested_joins.<locals>.<genexpr>c3s"|]}<00>|j|fVqdS)N)r<>)rQr )<01> inner_colrOrSr<><00>scsGg|]=\}}}}||t<00>fdd<00>|D<><00>|f<00>qS)cs"g|]}<00>j||<00><00>qSrO)r)rQr<>)<01>drOrSrT<00>s zQSQLCompiler._transform_result_map_for_nested_joins.<locals>.<listcomp>.<listcomp>)<01>tuple)rQr<>r<><00>objs<6A>typ)r<>rOrSrT<00>s zFSQLCompiler._transform_result_map_for_nested_joins.<locals>.<listcomp>)r<>rr<>)rqrB<00>transformed_selectrO)r<>r<>rS<00>&_transform_result_map_for_nested_joins<6E>s z2SQLCompiler._transform_result_map_for_nested_joinsr.r/cCs<>|j }|r|jn
|jd}|d}|d}|rd|jd|j|<00>df<00>}n|jd|d|<00>}|S)Nrr.r/<00>explicit_correlate_froms<6D>implicit_correlate_fromsr<73>)r<>r<00>_get_display_froms<6D>
difference)rqrBr<>rr<>r.r/<00>fromsrOrOrS<00>_display_froms_for_select<63>s


     z%SQLCompiler._display_froms_for_selectc sT<00>jo$| o$<00>j o$<00>jj } | ro<00>j<00><00>}
<00>j|
d<00>d|d|d|dd|<00>} n<00>j } | r<><00>jn
<00>jd} | p<>|dkr<>| jd d
<00>p<>| jd d
<00><00><00> r<>d |kr<>|d =n| r <01>r<01>j<00>|
<00>n| S<>j <00>| <00><00>}|j
<00><00><00>j id
d 6d
d6<>d} <00>j r<><01>j <00><00>\}}|r<>| |d7} q<>nd}<00>jr<>| <00>j<00><00>j|<00>7} n| <00>j<00>|<00>7} dd<00><00><00><00><00><00>fdd<00><00>jD<>D<>}<00>rg|dk rgttdd<00><00>jD<>dd<00>|jD<><00><00><00><00>fdd<00><00>jD<><00>_n<00>j| <00>||||<00>} <00>jr<><02>fdd<00><00>jD<>}|r<>| d<00>j|<00>7} q<>n<00>jr<><02>j<00><00>r<><02>j<00>| } n<00>jr$| d<00>j<00><00>j|<00>7} n<00>jjd<00><01>rL|rLd| dS| SdS)Nr<4E>rr<>r<00>nested_join_translationTrrrFr<46>r<>r<>r<>zSELECT rcSs"g|]}|dk r|<00>qS)NrO)rQr rOrOrSrT)s  z,SQLCompiler.visit_select.<locals>.<listcomp>c
s7g|]-\}}<00>j<00>|<00><00><00>d|<00><01>qS)r<>)r<>)rQr<>r)r<>r<>rrBrqrOrSrT*s cSsg|]\}}|<00>qSrOrO)rQr<>r<>rOrOrSrT;s cSsg|]\}}|<00>qSrOrO)rQr<>r<>rOrOrSrT<s csGg|]=\}}}}||t<00>fdd<00>|D<><00>|f<00>qS)c3s!|]}<00>j||<00>VqdS)N)r)rQ<00>o)<01> translaterOrSr<>Asz6SQLCompiler.visit_select.<locals>.<listcomp>.<genexpr>)r<>)rQr<>r<>r|r<>)r<>rOrSrTAs cs4g|]*\}}|d<00>jjfkr|<00>qS)<01>*)rlr<>)rQ<00> dialect_nameZht)rqrOrSrTJs r<>r<>r<>r<>)r<>r<>rlZsupports_right_nested_joinsr<73><00> visit_selectrrr<><00>_setup_select_stack<63>copyr<79><00>_hints<74>_setup_select_hints<74> _prefixesr<73><00>get_select_precolumnsZ_columns_plus_namesr<73>r<>r<><00>_compose_select_bodyZ_statement_hintsr<73>r<><00>_is_toplevel_selectr;r<>r<>)rqrBr<>rr<>rr<>Zselect_wraps_forr}Zneeds_nested_translationr<6E>r<>rr<>r<><00> hint_text<78>byfromrZ per_dialectrO)r<>r<>rrBrqr<>rSr<><00>s<> 
  
 
               zSQLCompiler.visit_selectcCsb|jdd|koat|j<00>dkpa|joat|j<00>dkoa|j|jddkS)z<>Return True if the stack is placed at the given select, and
is also the outermost SELECT, meaning there is either no stack
before this one, or the enclosing stack is a topmost INSERT.
rr r rr<>)r<>r<><00>isinsertrn)rqrBrOrOrSr<>_s3zSQLCompiler._is_toplevel_selectcsAt<00>fdd<00>|jj<00>D<><00>}<00>j|<00>}||fS)Nc sZg|]P\\}}}|d<00>jjfkr||i|j<00>dd<00>d6f<00>qS)r<>r<>Tr<54>)rlr<>r{)rQ<00>from_rlr<>)rqrOrSrTos z3SQLCompiler._setup_select_hints.<locals>.<listcomp>)r<>r<>r<>r<>)rqrBr<>r<>rO)rqrSr<>ms
zSQLCompiler._setup_select_hintsc
Cs<>|d}|d}|r>|jd|j|<00>df<00>}n|jd|d|<00>}ttj|<00><00>}|j|<00>}i|d6|d6|d6} |jj| <00>|S)Nr.r/r<>r<>r )r<>r<>rDr Z _from_objectsrIr<>r1)
rqrBr<>r<>r.r/r<>Znew_correlate_fromsZall_correlate_fromsZ new_entryrOrOrSr<>zs$

     
zSQLCompiler._setup_select_stackc s<>|dj|<00>7}|r<>|d7}|jr[|dj<00><00><00>fdd<00>|D<><00>7}q<>|dj<00><00>fdd<00>|D<><00>7}n|<00>j<00>7}|jdk r<>|jj<00><00><00>}|r<>|d|7}q<>n|jjr|jj<00><00><00>}|r|d|7}qn|jdk rN|jj<00><00><00>}|rN|d|7}qNn|jjrs|<00>j |<00><00>7}n|j
dk s<>|j dk r<>|<00>j |<00><00>7}n|j dk r<>|<00>j|<00><00>7}n|S) Nz, z
FROM c s.g|]$}|j<00>ddd<00><00><00><02>qS)r<>Tr<54>)r{)rQ<00>f)r<>r}rqrOrSrT<00>s z4SQLCompiler._compose_select_body.<locals>.<listcomp>cs(g|]}|j<00>dd<00><00><01>qS)r<>T)r{)rQr<>)r}rqrOrSrT<00>s z
WHERE z
GROUP BY z
HAVING )r/r<>r<><00> _whereclauser{r6rZ_having<6E>_order_by_clauser7r8r9r:Z_for_update_arg<72>for_update_clause) rqr<>rBrr<>r<>r}<00>tr=rO)r<>r}rqrSr<><00>s@
       z SQLCompiler._compose_select_bodyc s<dj<00><00>fdd<00>|D<><00>}|r8|d7}n|S)Nrc3sE|];\}}|dks-|<00>jjkr|j<00><00><00>VqdS)N)rlr<>r{)rQ<00>prefixr<78>)r<>rqrOrSr<><00>s  z1SQLCompiler._generate_prefixes.<locals>.<genexpr>)r/)rq<00>stmt<6D>prefixesr<73>rrO)r<>rqrSr<><00>s   zSQLCompiler._generate_prefixescs<><00>jr;t<00>fdd<00><00>jD<>g<00><00>j<17>_n<00>j<00>j<00>d}|djdd<00><00>jj<00>D<><00>7}|d7}|S)Ncsg|]}<00>j|<19>qSrO)r<>)rQr<>)rqrOrSrT<00>s z2SQLCompiler._render_cte_clause.<locals>.<listcomp>rz,
cSsg|] }|<00>qSrOrO)rQZtxtrOrOrSrT<00>s z
)r<><00>sumr<6D>r<><00>get_cte_preambler<65>r/<00>values)rqZcte_textrO)rqrSr;<00>s   
zSQLCompiler._render_cte_clausecCs|r
dSdSdS)NzWITH RECURSIVEZWITHrO)rqrzrOrOrSr<><00>szSQLCompiler.get_cte_preamblecKs|jrdpdS)zcCalled when building a ``SELECT`` statement, position is just
before column list.
z DISTINCT r~)Z _distinct)rqrBr<>rOrOrSr<><00>sz!SQLCompiler.get_select_precolumnscKs+|jj||<00>}|r#d|SdSdS)Nz
ORDER BY r~)r<>r{)rqrBr<>rrOrOrSr7<00>szSQLCompiler.order_by_clausecKsdS)Nz FOR UPDATErO)rqrBr<>rOrOrSr<><00>szSQLCompiler.for_update_clausecCstjd<00><00>dS)Nz@RETURNING is not supported by this dialect's statement compiler.)r r<>)rqr<>Zreturning_colsrOrOrS<00>returning_clause<73>szSQLCompiler.returning_clausecKs<>d}|jdk r5|d|j|j|<00>7}n|jdk r<>|jdkr`|d7}n|d|j|j|<00>7}n|S)Nr~z
LIMIT z
LIMIT -1z OFFSET )r8ror9)rqrBr<>r<>rOrOrSr:<00>s   zSQLCompiler.limit_clausec Ks<>|s |r<>|rSt|dd<00>rS|jj|j<00>d|jj|j<00>}n|jj|j<00>}|r<>||kr<>|j|||||<00>}n|SdSdS)Nrr<>r~)r<>r<>r<>rr<>r<>r<>) rqrFr<>r<>r<>r<><00>
use_schemar}r<>rOrOrS<00> visit_tables / zSQLCompiler.visit_tablecKs\|jj|dd|<00>|jr'dp*d|jj|dd|<00>d|jj||<00>S)Nr<4E>Tz LEFT OUTER JOIN z JOIN z ON )r1r{ZisouterrAr<>)rqr/r<>r}rOrOrS<00>
visit_joinsHzSQLCompiler.visit_joinc
 s<00>jjit<00>d6t<00>d6|d6<>d<00>_tj<00>||<00>}| r<><00>jj r<><00>jj r<>t j
d<00>jj <16><00>n|j r<><00>jj s<>t j
d<00>jj <16><00>n|d}n|}<00>j<00><00>jj}d}|jr |<00>j||j|<00>7}n|d 7}<00>j|j<00>}|jr<>t<00>fd
d <00>|jj<00>D<><00>}|j|kr<><01>j||j||jd<00>}q<>n||7}|s<>| r<>|d d j<00>fdd <00>|D<><00>7}n<00>js<>|jr.<02>jp<>|j<00>_<00>j|<00>j<00>} <00>jr.|d| 7}q.n|jdk r]|d<00>j<00>j|<00>7}nn| rw|rw|d7}nT|j r<>|dd jdd<00>|D<><00>7}n$|dd jdd <00>|D<><00>7}<00>jr<><02>j r<>|d| 7}n<00>jjd<00>|S)Nr.r/r TzWThe '%s' dialect with current database version settings does not support empty inserts.zcThe '%s' dialect with current database version settings does not support in-place multirow inserts.rzINSERT zINTO cs@g|]6\\}}}|d<00>jjfkr||f<00>qS)r<>)rlr<>)rQrFrlr<>)rqrOrSrTBs z,SQLCompiler.visit_insert.<locals>.<listcomp>z (%s)z, cs#g|]}<00>j|d<19><00>qS)r)rw)rQr )r<>rOrSrTRs rz %sz DEFAULT VALUESz
VALUES %scss/|]%}ddjdd<00>|D<><00>VqdS)z(%s)z, css|]}|dVqdS)rNrO)rQr rOrOrSr<>esz5SQLCompiler.visit_insert.<locals>.<genexpr>.<genexpr>N)r/)rQZcrud_param_setrOrOrSr<>dsz+SQLCompiler.visit_insert.<locals>.<genexpr>z VALUES (%s)cSsg|]}|d<19>qS)rrO)rQr rOrOrSrTls rr<>) r<>r1rDr<>r
<00>_get_crud_paramsrl<00>supports_default_valuesZsupports_empty_insertr r<>r<>Z_has_multi_parametersZsupports_multivalues_insertr<74>r<>r<><00> format_tablerFr<>r<>r<>r<>r/<00> returning<6E>
_returningr<EFBFBD><00>returning_precedes_valuesrBroZ_insert_from_selectr<74>)
rqZ insert_stmtr<74><00> crud_paramsZcrud_params_singler<65>r<><00>
table_text<EFBFBD> dialect_hintsr<73>rO)r<>rqrS<00> visit_insertsz  
            
 

       zSQLCompiler.visit_insertcCsdS)z3Provide a hook for MySQL to add LIMIT to the UPDATENrO)rq<00> update_stmtrOrOrS<00>update_limit_clauseuszSQLCompiler.update_limit_clausecKs|j|dddd|<00>S)z|Provide a hook to override the initial table clause
in an UPDATE statement.
MySQL overrides this.
r<>Tr<54>)r{)rqr<><00>
from_table<EFBFBD> extra_fromsr<73>rOrOrS<00>update_tables_clauseysz SQLCompiler.update_tables_clausec s*ddj<00><00><00>fdd<00>|D<><00>S)z~Provide a hook to override the generation of an
UPDATE..FROM clause.
MySQL and MSSQL override this.
zFROM z, c3s-|]#}|j<00>ddd<00><00><00>VqdS)r<>Tr<54>N)r{)rQr<>)<03>
from_hintsr<EFBFBD>rqrOrSr<><00>sz1SQLCompiler.update_from_clause.<locals>.<genexpr>)r/)rqr<>r<>r<>r<>r<>rO)r<>r<>rqrS<00>update_from_clause<73>s
zSQLCompiler.update_from_clausec  s<><00>jjit|jg<00>d6t|jg<00>d6|d6<>d<00>_|j}d}|jr}|<00>j||j|<00>7}n<00>j||j||<00>}t j
<00>||<00>}|j rt <00>fdd<00>|j j <00>D<><00>}|j|kr<01>j||j||jd<00>}qnd}||7}|d7}|o;<01>j<00>|d j<00><00>fd
d <00>|D<><00>7}<00>jsy|jr<><01>js<>|j<00>_n<00>jr<>|d <00>j|<00>j<00>7}q<>n|r<><01>j||j|||<00>}|r<>|d |7}q<>n|jdk r9<02>j|j|<00>} | r9|d | 7}q9n<00>j|<00>}
|
r_|d |
7}n<00>jr<><02>j r<>|d <00>j|<00>j<00>7}n<00>jjd<00>|S)Nr.r/r TzUPDATE cs@g|]6\\}}}|d<00>jjfkr||f<00>qS)r<>)rlr<>)rQrFrlr<>)rqrOrSrT<00>s z,SQLCompiler.visit_update.<locals>.<listcomp>z SET z, c3s4|]*}|dj<00>d<00><00>d|dVqdS)rr<><00>=rN)r{)rQr )r<>rqrOrSr<><00>sz+SQLCompiler.visit_update.<locals>.<genexpr>rz WHERE rr<>)r<>r1rDrF<00>isupdateZ _extra_fromsr<73>r<>r<>r
r<>r<>r<>r<>r<><00>'render_table_with_column_in_update_fromr/r<>r<>r<>r<>r<>r<>ror<>r<>) rqr<>r<>r<>r<>r<>r<>r<>Zextra_from_textr<74>r:rO)r<>rqrS<00> visit_update<74>sr        


       zSQLCompiler.visit_updatecCs tj|<00>S)N)r
<00>_key_getters_for_crud_column)rqrOrOrSr<><00>sz(SQLCompiler._key_getters_for_crud_columnc s<><00>jjit|jg<00>d6t|jg<00>d6|d6<>d<00>_d}|jrt|<00>j||j|<00>7}n|d7}|jj<00>dddd<00>}|jrt <00>fd d
<00>|jj
<00>D<><00>}|j|kr
<01>j ||j||jd<00>}q
nd}||7}|j rU|j <00>_ <00>jrU|d <00>j||j <00>7}qUn|jdk r<>|jj<00>|<00>}|r<>|d |7}q<>n<00>j r<><01>j r<>|d <00>j||j <00>7}n<00>jjd<00>|S)Nr.r/r TzDELETE zFROM r<>r<>cs@g|]6\\}}}|d<00>jjfkr||f<00>qS)r<>)rlr<>)rQrFrlr<>)rqrOrSrT<00>s z,SQLCompiler.visit_delete.<locals>.<listcomp>rz WHERE rr<>)r<>r1rDrF<00>isdeleter<65>r<>r{r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>)rqZ delete_stmtr<74>r<>r<>r<>r<>rO)rqrS<00> visit_delete<74>sJ    
  

     zSQLCompiler.visit_deletecCsd|jj|<00>S)Nz SAVEPOINT %s)r<><00>format_savepoint)rq<00>savepoint_stmtrOrOrS<00>visit_savepoint szSQLCompiler.visit_savepointcCsd|jj|<00>S)NzROLLBACK TO SAVEPOINT %s)r<>r<>)rqr<>rOrOrS<00>visit_rollback_to_savepoint#sz'SQLCompiler.visit_rollback_to_savepointcCsd|jj|<00>S)NzRELEASE SAVEPOINT %s)r<>r<>)rqr<>rOrOrS<00>visit_release_savepoint'sz#SQLCompiler.visit_release_savepoint)<29>r<EFBFBD>r<>r<>r<><00> EXTRACT_MAPr <00>COMPOUND_KEYWORDSr2r<>r<>r<>r<>r<>r<>r<>rKrrr Zmemoized_instancemethodr<64><00>
contextlib<EFBFBD>contextmanagerr<72>r<><00>memoized_propertyr<79>r<>r<>rzr<>rw<00> dependenciesr<73>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rr
r rrrrrrrr#r*r-r+r(r>rCrDrErIrGrNrOrPrLr@rArRrWrYr[r\r]r^rUrXrbrcrdrerlrhrarir<>rsr<>r<>ryr<>r<>rr<>r<>r<>r<>r<>r<>r<>r<>r<><00> frozensetrr<>r<>r<>r<>r<>r<>r<>r;r<>r<>r7r<>r<>r:r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rOrOrOrSr<>s C 
0 #'                +                  -     P  K      Y   v   /     
 ]   R 7  r<>c@s<>eZdZejdd<00><00>Zejdd<00><00>Zedd<00><00>Zddd <00>Z d
d <00>Z
d d <00>Z dd<00>Z dd<00>Z ddd<00>Zddd<00>Zdd<00>Zdd<00>Zdd<00>Zdddd<00>Zd d!<00>Zdd"d#<00>Zd$d%<00>Zd&d'<00>Zd(d)<00>Zd*d+<00>Zd,d-<00>Zd.d/<00>Zd0d1<00>Zd2d3<00>Zd4d5<00>Zd6d7<00>Zd8d9<00>Z d:d;<00>Z!d<d=<00>Z"d>d?<00>Z#d@dA<00>Z$dBdC<00>Z%dS)D<> DDLCompilercCs|jj|jd<00>S)N)rlZstatement_compiler)rqrOrOrSrz.szDDLCompiler.sql_compilercCs
|jjS)N)rlr<>)rqrOrOrSr<>2szDDLCompiler.type_compilercCs
|jjS)N)rlr<>)rqrOrOrSr<>6szDDLCompiler.preparerNcCsdS)NrO)rqrwrOrOrSr<>:szDDLCompiler.construct_paramscKs<>|j}t|jtj<00>r<>|j<00>}|jj}|j|j<00>}t |<00>dkrn|dd}}n|d|d}}|j
d|<00>|j
d|<00>|j
d|j |j<00><00>n|j j |j|<16>S)Nrrr~rFr<00>fullnamer<65>)<0F>contextr<74><00>targetrZTabler<65>rlr<><00>format_table_seqr<71><00>
setdefaultr<EFBFBD>rzr<>rn)rqZddlr}r<>r<><00>pathrFZschrOrOrS<00> visit_ddl=s   zDDLCompiler.visit_ddlcCs|jj|j<00>}d|S)NzCREATE SCHEMA )r<><00> format_schemar<61>)rqrrrOrOrS<00>visit_create_schemaPszDDLCompiler.visit_create_schemacCs9|jj|j<00>}d|}|jr5|d7}n|S)Nz DROP SCHEMA z CASCADE)r<>r<>r<><00>cascade)rq<00>droprr<>rOrOrS<00>visit_drop_schemaTs

  zDDLCompiler.visit_drop_schemac Cs<>|j}|jj}ddjdg|jd|j|<00>dg<17>}d}d}x<>|jD]<5D>}|j}yb|j|d|jo<>| <0C>} | dk r<>||7}d}|d | 7}n|jr<>d
}nWq^t j
k
r2}
z>t j t j
t j d <00>|j|j|
jd f<16><00>WYdd}
~
Xq^Xq^W|j|d |j<00>} | rj||d | 7}n|d|j|<00>7}|S)N<>
rZCREATEZTABLEr<45>F<>first_pkz,
<EFBFBD> Tz (in table '%s', column '%s'): %sr<00> _include_foreign_key_constraintsz
)%s
)r<>rlr<>r/r<>r<><00>columnsro<00> primary_keyr r<>r Zraise_from_cause<73>u<> descriptionr<6E><00>args<67>create_table_constraintsZinclude_foreign_key_constraints<74>post_create_table) rqrrFr<>r<><00> separatorrZ create_columnr<00> processed<65>ce<63>constrOrOrS<00>visit_create_table[sB        
 
   8 zDDLCompiler.visit_create_tableFcsk|j}|jrdS<>j|d|<00>}dj<00>fdd<00>|jD<><00>}|rg|d|7}n|S)Nrrc3s|]}<00>j|<00>VqdS)N)ro)rQr)rqrOrSr<><00>sz2DDLCompiler.visit_create_column.<locals>.<genexpr>)r<><00>system<65>get_column_specificationr/<00> constraints)rqrrrr<>rrO)rqrS<00>visit_create_column<6D>s   zDDLCompiler.visit_create_columncs<>g}<00>jr"|j<00>j<00>n<00>j}|dk rI|j|<00><00>n t<00><00>|j<00><00>fdd<00><00>jD<><00>djdd<00><00>fdd<00>|D<>D<><00>S)Ncs1g|]'}|<00>jk r|<00>kr|<00>qSrO)r)rQr )<02> omit_fkcsrFrOrSrT<00>s z8DDLCompiler.create_table_constraints.<locals>.<listcomp>z,
css!|]}|dk r|VqdS)NrO)rQ<00>prOrOrSr<><00>s z7DDLCompiler.create_table_constraints.<locals>.<genexpr>c3s\|]R}|jdks'|j<00><00>r<00>jj sGt|dd<00> r<00>j|<00>VqdS)NZ use_alterF)Z _create_rulerlZsupports_alterr<72>ro)rQr)rqrOrSr<><00>s
 )rr1Zforeign_key_constraintsr<73>rD<00>extendZ_sorted_constraintsr/)rqrFrrZall_fkcsrO)rrqrFrSr
<00>s    & z$DDLCompiler.create_table_constraintscCsd|jj|j<00>S)Nz
DROP TABLE )r<>r<>r<>)rqr<>rOrOrS<00>visit_drop_table<6C>szDDLCompiler.visit_drop_tablecCsd|jj|j<00>S)Nz
DROP VIEW )r<>r<>r<>)rqr<>rOrOrS<00>visit_drop_view<65>szDDLCompiler.visit_drop_viewcCs,|jdkr(tjd|j<16><00>ndS)Nz,Index '%s' is not associated with any table.)rFr r<>r<>)rqr<>rOrOrS<00>_verify_index_table<6C>s zDDLCompiler._verify_index_tableTcs<>|j}<00>j|<00><01>j}d}|jr;|d7}n|d<00>j|d|<00>|j|jd|<00>dj<00>fdd<00>|jD<><00>f7}|S) NzCREATE zUNIQUE zINDEX %s ON %s (%s)<29>include_schemar<61>z, c3s-|]#}<00>jj|dddd<00>VqdS)r<>FrJTN)rzro)rQr )rqrOrSr<><00>sz1DDLCompiler.visit_create_index.<locals>.<genexpr>) r<>rr<>rJ<00>_prepared_index_namer<65>rFr/Z expressions)rqrrZinclude_table_schemar<61>r<>r<>rO)rqrS<00>visit_create_index<65>s      zDDLCompiler.visit_create_indexcCs |j}d|j|dd<00>S)Nz
DROP INDEX rT)r<>r)rqr<>r<>rOrOrS<00>visit_drop_index<65>s  zDDLCompiler.visit_drop_indexcCs<>|rB|jdk rB|jjrB|jj}|jj|<00>}nd}|j}t|tj<00>r<>|jj px|jj
}t |<00>|kr<>|d|d<18>dt j |<00>dd<00>}q<>n|jj|<00>|jj|<00>}|r<>|d|}n|S)Nr<00>ro<00>r<><00><><EFBFBD><EFBFBD><EFBFBD>)rFrr<>r<>r<>r<>rr<>rlZmax_index_name_lengthr<68>r<>r Zmd5_hexZvalidate_identifierr<72>)rqr<>rrZ schema_nameruZmax_Z
index_namerOrOrSr<00>s!    5z DDLCompiler._prepared_index_namecCs,d|jj|jj<00>|j|j<00>fS)NzALTER TABLE %s ADD %s)r<>r<>r<>rFro)rqrrOrOrS<00>visit_add_constraint<6E>sz DDLCompiler.visit_add_constraintcCsd|jj|j<00>}|jjdk rB|d|jj7}n|jjdk rk|d|jj7}n|jjdk r<>|d|jj7}n|jjdk r<>|d|jj7}n|jjdk r<>|d7}n|jjdk r<>|d7}n|jj dk r|d7}n|S) NzCREATE SEQUENCE %sz INCREMENT BY %dz START WITH %dz MINVALUE %dz MAXVALUE %dz NO MINVALUEz NO MAXVALUEz CYCLE)
r<EFBFBD><00>format_sequencer<65><00> increment<6E>startZminvalueZmaxvalueZ
nominvalueZ
nomaxvalue<EFBFBD>cycle)rqrr<>rOrOrS<00>visit_create_sequence<63>s"   z!DDLCompiler.visit_create_sequencecCsd|jj|j<00>S)NzDROP SEQUENCE %s)r<>r#r<>)rqr<>rOrOrS<00>visit_drop_sequence szDDLCompiler.visit_drop_sequencecCs<>|j}|jdk r-|jj|<00>}nd}|dkrXtjd|j<16><00>nd|jj|jj<00>||jr<>dp<>dfS)Nz<Can't emit DROP CONSTRAINT for constraint %r; it has no namez#ALTER TABLE %s DROP CONSTRAINT %s%sz CASCADEr~) r<>r<>r<><00>format_constraintr r<>r<>rFr<>)rqr<>r<00>formatted_namerOrOrS<00>visit_drop_constraint s  z!DDLCompiler.visit_drop_constraintcKsx|jj|<00>d|jjj|jd|<00>}|j|<00>}|dk r^|d|7}n|jst|d7}n|S)Nrr<>z DEFAULT z NOT NULL)r<>rwrlr<>ror<><00>get_column_default_stringZnullable)rqrr}ZcolspecrrOrOrSr s    z$DDLCompiler.get_column_specificationcCsdS)Nr~rO)rqrFrOrOrSr , szDDLCompiler.post_create_tablecCsbt|jtj<00>rZt|jjtj<00>r;d|jjS|jj|jjdd<00>SndSdS)Nz'%s'rJT) r<>Zserver_defaultrZ DefaultClause<73>argr <00> string_typesrzro)rqrrOrOrSr,/ s  z%DDLCompiler.get_column_default_stringcCs<>d}|jdk rG|jj|<00>}|dk rG|d|7}qGn|d|jj|jdddd<00>7}||j|<00>7}|S)Nr~zCONSTRAINT %s z
CHECK (%s)r<>FrJT)r<>r<>r)rzror<><00>define_constraint_deferrability)rqrr<>r*rOrOrS<00>visit_check_constraint9 s  z"DDLCompiler.visit_check_constraintcCsod}|jdk rG|jj|<00>}|dk rG|d|7}qGn|d|j7}||j|<00>7}|S)Nr~zCONSTRAINT %s z
CHECK (%s))r<>r<>r)r<>r/)rqrr<>r*rOrOrS<00>visit_column_check_constraintE s z)DDLCompiler.visit_column_check_constraintcs<>t|<00>dkrdSd}|jdk r]<00>jj|<00>}|dk r]|d|7}q]n|d7}|ddj<00>fdd<00>|D<><00>7}|<00>j|<00>7}|S) Nrr~zCONSTRAINT %s z PRIMARY KEY z(%s)z, c3s$|]}<00>jj|j<00>VqdS)N)r<>r<>r<>)rQr )rqrOrSr<>X sz;DDLCompiler.visit_primary_key_constraint.<locals>.<genexpr>)r<>r<>r<>r)r/r/)rqrr<>r*rO)rqrS<00>visit_primary_key_constraintO s 
z(DDLCompiler.visit_primary_key_constraintcs |jj<00>d}|jdk rS|jj|<00>}|dk rS|d|7}qSnt|j<00>djj}|ddj <00>fdd<00>|jD<><00>|j
||<00><00>dj <00>fdd<00>|jD<><00>f7}||j |<00>7}||j |<00>7}||j |<00>7}|S) Nr~zCONSTRAINT %s rz"FOREIGN KEY(%s) REFERENCES %s (%s)z, c3s$|]}<00>j|jj<00>VqdS)N)r<><00>parentr<74>)rQr<>)r<>rOrSr<>f sz;DDLCompiler.visit_foreign_key_constraint.<locals>.<genexpr>c3s$|]}<00>j|jj<00>VqdS)N)r<>rr<>)rQr<>)r<>rOrSr<>j s)rlr<>r<>r<>r)r'rrrFr/<00>define_constraint_remote_table<6C>define_constraint_match<63>define_constraint_cascadesr/)rqrr<>r*Z remote_tablerO)r<>rS<00>visit_foreign_key_constraint] s$    z(DDLCompiler.visit_foreign_key_constraintcCs |j|<00>S)z=Format the remote table clause of a CREATE CONSTRAINT clause.)r<>)rqrrFr<>rOrOrSr4r sz*DDLCompiler.define_constraint_remote_tablecs<>t|<00>dkrdSd}|jdk rN<00>jj|<00>}|d|7}n|ddj<00>fdd<00>|D<><00>7}|<00>j|<00>7}|S)Nrr~zCONSTRAINT %s z UNIQUE (%s)z, c3s$|]}<00>jj|j<00>VqdS)N)r<>r<>r<>)rQr )rqrOrSr<> sz6DDLCompiler.visit_unique_constraint.<locals>.<genexpr>)r<>r<>r<>r)r/r/)rqrr<>r*rO)rqrS<00>visit_unique_constraintw sz#DDLCompiler.visit_unique_constraintcCsPd}|jdk r)|d|j7}n|jdk rL|d|j7}n|S)Nr~z ON DELETE %sz ON UPDATE %s)ZondeleteZonupdate)rqrr<>rOrOrSr6<00> s z&DDLCompiler.define_constraint_cascadescCs_d}|jdk r8|jr+|d7}q8|d7}n|jdk r[|d|j7}n|S)Nr~z DEFERRABLEz NOT DEFERRABLEz INITIALLY %s)r r,)rqrr<>rOrOrSr/<00> s   z+DDLCompiler.define_constraint_deferrabilitycCs-d}|jdk r)|d|j7}n|S)Nr~z MATCH %s)<01>match)rqrr<>rOrOrSr5<00> sz#DDLCompiler.define_constraint_match)&r<>r<>r<>r r<>rzr<>r<>r<>r<>r<>r<>rrrr
rrrrrrr"r'r(r+rr r,r0r1r2r7r4r8r6r/r5rOrOrOrSr<>,sB     )         
    r<>c@seZdZdd<00>Zdd<00>Zdd<00>Zdd<00>Zd d
<00>Zd d <00>Zd d<00>Z dd<00>Z
dd<00>Z dd<00>Z dd<00>Z dd<00>Zdd<00>Zdd<00>Zdd<00>Zdd <00>Zd!d"<00>Zd#d$<00>Zd%d&<00>Zd'd(<00>Zd)d*<00>Zd+d,<00>Zd-d.<00>Zd/d0<00>Zd1d2<00>Zd3d4<00>Zd5d6<00>Zd7d8<00>Zd9d:<00>Zd;d<<00>Z d=d><00>Z!d?d@<00>Z"dAdB<00>Z#dCdD<00>Z$dEdF<00>Z%dGdH<00>Z&dIdJ<00>Z'dKdL<00>Z(dMdN<00>Z)dOdP<00>Z*dQdR<00>Z+dSdT<00>Z,dUS)V<>GenericTypeCompilercKsdS)N<>FLOATrO)rqr<>r<>rOrOrS<00> visit_FLOAT<41> szGenericTypeCompiler.visit_FLOATcKsdS)NZREALrO)rqr<>r<>rOrOrS<00>
visit_REAL<EFBFBD> szGenericTypeCompiler.visit_REALcKsT|jdkrdS|jdkr4di|jd6Sdi|jd6|jd6SdS)NZNUMERICzNUMERIC(%(precision)s)<29> precisionz!NUMERIC(%(precision)s, %(scale)s)<29>scale)r>r?)rqr<>r<>rOrOrS<00> visit_NUMERIC<49> s z!GenericTypeCompiler.visit_NUMERICcKsT|jdkrdS|jdkr4di|jd6Sdi|jd6|jd6SdS)NZDECIMALzDECIMAL(%(precision)s)r>z!DECIMAL(%(precision)s, %(scale)s)r?)r>r?)rqr<>r<>rOrOrS<00> visit_DECIMAL<41> s z!GenericTypeCompiler.visit_DECIMALcKsdS)NZINTEGERrO)rqr<>r<>rOrOrS<00> visit_INTEGER<45> sz!GenericTypeCompiler.visit_INTEGERcKsdS)NZSMALLINTrO)rqr<>r<>rOrOrS<00>visit_SMALLINT<4E> sz"GenericTypeCompiler.visit_SMALLINTcKsdS)NZBIGINTrO)rqr<>r<>rOrOrS<00> visit_BIGINT<4E> sz GenericTypeCompiler.visit_BIGINTcKsdS)NZ TIMESTAMPrO)rqr<>r<>rOrOrS<00>visit_TIMESTAMP<4D> sz#GenericTypeCompiler.visit_TIMESTAMPcKsdS)NZDATETIMErO)rqr<>r<>rOrOrS<00>visit_DATETIME<4D> sz"GenericTypeCompiler.visit_DATETIMEcKsdS)NZDATErO)rqr<>r<>rOrOrS<00>
visit_DATE<EFBFBD> szGenericTypeCompiler.visit_DATEcKsdS)NZTIMErO)rqr<>r<>rOrOrS<00>
visit_TIME<EFBFBD> szGenericTypeCompiler.visit_TIMEcKsdS)NZCLOBrO)rqr<>r<>rOrOrS<00>
visit_CLOB<EFBFBD> szGenericTypeCompiler.visit_CLOBcKsdS)NZNCLOBrO)rqr<>r<>rOrOrS<00> visit_NCLOB<4F> szGenericTypeCompiler.visit_NCLOBcCsD|}|jr#|d|j7}n|jr@|d|j7}n|S)Nz(%d)z COLLATE "%s")<02>lengthZ collation)rqr<>r<>r<>rOrOrS<00>_render_string_type<70> s   z'GenericTypeCompiler._render_string_typecKs|j|d<00>S)NZCHAR)rL)rqr<>r<>rOrOrS<00>
visit_CHAR<EFBFBD> szGenericTypeCompiler.visit_CHARcKs|j|d<00>S)NZNCHAR)rL)rqr<>r<>rOrOrS<00> visit_NCHAR<41> szGenericTypeCompiler.visit_NCHARcKs|j|d<00>S)NZVARCHAR)rL)rqr<>r<>rOrOrS<00> visit_VARCHAR<41> sz!GenericTypeCompiler.visit_VARCHARcKs|j|d<00>S)NZNVARCHAR)rL)rqr<>r<>rOrOrS<00>visit_NVARCHAR<41> sz"GenericTypeCompiler.visit_NVARCHARcKs|j|d<00>S)NZTEXT)rL)rqr<>r<>rOrOrS<00>
visit_TEXT<EFBFBD> szGenericTypeCompiler.visit_TEXTcKsdS)NZBLOBrO)rqr<>r<>rOrOrS<00>
visit_BLOB<EFBFBD> szGenericTypeCompiler.visit_BLOBcKsd|jrd|jpdS)N<>BINARYz(%d)r~)rK)rqr<>r<>rOrOrS<00> visit_BINARY<52> sz GenericTypeCompiler.visit_BINARYcKsd|jrd|jpdS)NZ VARBINARYz(%d)r~)rK)rqr<>r<>rOrOrS<00>visit_VARBINARY<52> sz#GenericTypeCompiler.visit_VARBINARYcKsdS)NZBOOLEANrO)rqr<>r<>rOrOrS<00> visit_BOOLEAN<41> sz!GenericTypeCompiler.visit_BOOLEANcKs|j||<00>S)N)rR)rqr<>r<>rOrOrS<00>visit_large_binary<72> sz&GenericTypeCompiler.visit_large_binarycKs|j||<00>S)N)rV)rqr<>r<>rOrOrS<00> visit_boolean<61> sz!GenericTypeCompiler.visit_booleancKs|j||<00>S)N)rH)rqr<>r<>rOrOrS<00>
visit_time
szGenericTypeCompiler.visit_timecKs|j||<00>S)N)rF)rqr<>r<>rOrOrS<00>visit_datetime
sz"GenericTypeCompiler.visit_datetimecKs|j||<00>S)N)rG)rqr<>r<>rOrOrS<00>
visit_date
szGenericTypeCompiler.visit_datecKs|j||<00>S)N)rD)rqr<>r<>rOrOrS<00>visit_big_integer
sz%GenericTypeCompiler.visit_big_integercKs|j||<00>S)N)rC)rqr<>r<>rOrOrS<00>visit_small_integer
sz'GenericTypeCompiler.visit_small_integercKs|j||<00>S)N)rB)rqr<>r<>rOrOrS<00> visit_integer
sz!GenericTypeCompiler.visit_integercKs|j||<00>S)N)r=)rqr<>r<>rOrOrS<00>
visit_real
szGenericTypeCompiler.visit_realcKs|j||<00>S)N)r<)rqr<>r<>rOrOrS<00> visit_float
szGenericTypeCompiler.visit_floatcKs|j||<00>S)N)r@)rqr<>r<>rOrOrS<00> visit_numeric
sz!GenericTypeCompiler.visit_numericcKs|j||<00>S)N)rO)rqr<>r<>rOrOrS<00> visit_string
sz GenericTypeCompiler.visit_stringcKs|j||<00>S)N)rO)rqr<>r<>rOrOrS<00> visit_unicode
sz!GenericTypeCompiler.visit_unicodecKs|j||<00>S)N)rQ)rqr<>r<>rOrOrS<00>
visit_text"
szGenericTypeCompiler.visit_textcKs|j||<00>S)N)rQ)rqr<>r<>rOrOrS<00>visit_unicode_text%
sz&GenericTypeCompiler.visit_unicode_textcKs|j||<00>S)N)rO)rqr<>r<>rOrOrS<00>
visit_enum(
szGenericTypeCompiler.visit_enumcKstjd|<16><00>dS)NzKCan't generate DDL for %r; did you forget to specify a type on this Column?)r r<>)rqr<>r<>rOrOrSr +
s zGenericTypeCompiler.visit_nullcKs|j|j|j<00>|<00>S)N)roZ type_enginerl)rqr<>r<>rOrOrS<00>visit_type_decorator0
sz(GenericTypeCompiler.visit_type_decoratorcKs |j|<00>S)N)Z get_col_spec)rqr<>r<>rOrOrS<00>visit_user_defined3
sz&GenericTypeCompiler.visit_user_definedN)-r<>r<>r<>r<r=r@rArBrCrDrErFrGrHrIrJrLrMrNrOrPrQrRrTrUrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerfr rgrhrOrOrOrSr:<00> sT                                       r:c@sKeZdZdZeZeZeZ dddddd<00>Z
dd<00>Z d d
<00>Z d d <00>Z d d<00>Zddd<00>Zddd<00>Zddd<00>Zddd<00>Zddd<00>Zddd<00>Zejd<00>dd<00><00>Zdddd <00>Zdd!d"<00>Zdddd#d$<00>Zdd%d&<00>Zejd'd(<00><00>Zd)d*<00>ZdS)+<2B>IdentifierPreparerz@Handle quoting and case-folding of identifiers based on options.<2E>"NFcCsS||_||_|p|j|_||_|jd|_||_i|_dS)asConstruct 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.
r N)rl<00> initial_quote<74> final_quote<74> escape_quote<74>escape_to_quote<74> omit_schema<6D>_strings)rqrlrkrlrmrorOrOrSrrA
s    zIdentifierPreparer.__init__cCs|j|j|j<00>S)z<>Escape an identifier.
Subclasses should override this to provide database-dependent
escaping behavior.
)r<>rmrn)rqr<>rOrOrS<00>_escape_identifierY
sz%IdentifierPreparer._escape_identifiercCs|j|j|j<00>S)z<>Canonicalize an escaped identifier.
Subclasses should override this to provide database-dependent
unescaping behavior that reverses _escape_identifier.
)r<>rnrm)rqr<>rOrOrS<00>_unescape_identifierb
sz'IdentifierPreparer._unescape_identifiercCs|j|j|<00>|jS)z~Quote an identifier.
Subclasses should override this to provide database-dependent
quoting behavior.
)rkrqrl)rqr<>rOrOrS<00>quote_identifierk
sz#IdentifierPreparer.quote_identifiercCsT|j<00>}||jkpS|d|jkpS|jjtj|<00><00> pS||kS)z5Return True if the given identifier requires quoting.r)r$<00>reserved_words<64>illegal_initial_characters<72>legal_charactersr9r <00> text_type)rqr<>Zlc_valuerOrOrS<00>_requires_quotesv
s
 z#IdentifierPreparer._requires_quotescCs|j||<00>S)z<>Conditionally quote a schema.
Subclasses can override this to provide database-dependent
quoting behavior for schema names.
the 'force' flag should be considered deprecated.
)r<>)rqr<00>forcerOrOrSr<>~
s zIdentifierPreparer.quote_schemacCs<>t|dd<00>}|dkr{||jkr8|j|S|j|<00>r`|j|<00>|j|<n ||j|<|j|Sn|r<>|j|<00>S|SdS)zfConditionally quote an identifier.
the 'force' flag should be considered deprecated.
r<>N)r<>rprxrs)rqruryrOrOrSr<><00>
s    zIdentifierPreparer.quoteTcCsR|j|j<00>}|j rN|rN|jdk rN|j|j<00>d|}n|S)Nr<4E>)r<>r<>rorr<>)rqr,r<>r<>rOrOrSr#<00>
s
z"IdentifierPreparer.format_sequencecCs|j|p|j<00>S)N)r<>r<>)rqr<>r<>rOrOrSr<><00>
szIdentifierPreparer.format_labelcCs|j|p|j<00>S)N)r<>r<>)rqr<>r<>rOrOrSrx<00>
szIdentifierPreparer.format_aliascCs|j|p|j<00>S)N)r<>ru)rqZ savepointr<74>rOrOrSr<><00>
sz#IdentifierPreparer.format_savepointzsqlalchemy.sql.namingcCsit|jtj<00>rY|j||j<00>}|r=|j|<00>St|jtj<00>rYdSn|j|j<00>S)N)r<>r<>rZ _defer_nameZ_constraint_name_for_tablerFr<>Z_defer_none_name)rqZnamingrr<>rOrOrSr)<00>
s z$IdentifierPreparer.format_constraintcCsj|dkr|j}n|j|<00>}|j rf|rft|dd<00>rf|j|j<00>d|}n|S)z'Prepare a quoted table and schema name.Nrr<>)r<>r<>ror<>r<>r)rqrFr<>r<>r<>rOrOrSr<><00>
s  zIdentifierPreparer.format_tablecCs|j||<00>S)zPrepare a quoted schema name.)r<>)rqr<>r<>rOrOrSr<><00>
sz IdentifierPreparer.format_schemacCs<>|dkr|j}nt|dd<00>sm|r]|j|jddd|<00>d|j|<00>S|j|<00>Sn.|r<>|j|jddd|<00>d|S|SdS)zPrepare a quoted column name.Nr<4E>Fr<46>r<>r<>)r<>r<>r<>rFr<>)rqrZ use_tabler<65>Z
table_namerOrOrSrw<00>
s  -$z IdentifierPreparer.format_columncCsa|j rG|rGt|dd<00>rG|j|j<00>|j|dd<00>fS|j|dd<00>fSdS)z(Format table name and schema as a tuple.rNr<4E>F)ror<>r<>rr<>)rqrFr<>rOrOrSr<><00>
s
z#IdentifierPreparer.format_table_seqcCscdd<00>|j|j|j|j<00>fD<>\}}}tjdi|d6|d6|d6<16>}|S)NcSsg|]}tj|<00><00>qSrO)r<>r_)rQrrOrOrSrT<00>
s z5IdentifierPreparer._r_identifiers.<locals>.<listcomp>zM(?:(?:%(initial)s((?:%(escaped)s|[^%(final)s])+)%(final)s|([^\.]+))(?=\.|$))+<2B>initial<61>final<61>escaped)rkrlrqr<>rs)rqrzr{Z escaped_final<61>rrOrOrS<00>_r_identifiers<72>
s  "
z!IdentifierPreparer._r_identifierscs6<00>j}<00>fdd<00>dd<00>|j|<00>D<>D<>S)z:Unpack 'schema.table.column'-like strings into components.csg|]}<00>j|<00><00>qSrO)rr)rQr0)rqrOrSrT s z;IdentifierPreparer.unformat_identifiers.<locals>.<listcomp>cSs"g|]\}}|p|<00>qSrOrO)rQ<00>a<>brOrOrSrT s )r~<00>findall)rqZ identifiersr}rO)rqrS<00>unformat_identifiers<72>
s z'IdentifierPreparer.unformat_identifiers)r<>r<>r<>r<><00>RESERVED_WORDSrt<00>LEGAL_CHARACTERSrv<00>ILLEGAL_INITIAL_CHARACTERSrurrrqrrrsrxr<>r<>r#r<>rxr<>r r<>r)r<>r<>rwr<>r<>r~r<>rOrOrOrSri7
s0     ri)]r<>r<>r<>r~rrrrrrr r
r r r<>rDr<>rs<00>Ir<49><00>rangerIr<><00>UNICODEr<45>r<>r<><00>and_<64>or_<72>add<64>mulr<6C><00>div<69>mod<6F>truediv<69>neg<65>lt<6C>le<6C>ne<6E>gt<67>ge<67>eqZ concat_oprHZ notmatch_opZin_opZnotin_opZcomma_opr<70>r<><00>is_Zisnotr<00>existsZ distinct_op<6F>invZdesc_opZasc_opZ nullsfirst_opZ nullslast_opr<70>Zcoalescerrrrr3r4<00>randomr\rCrKr%r<>r}rhZ UNION_ALLriZ
EXCEPT_ALLrjZ INTERSECT_ALLr<4C><00>objectrk<00>with_metaclassZEnsureKWArgTyper<65>Z Visitabler<65>r<>r<>r:rirOrOrOrS<00><module>s<>  :   .
































 









 
     e% <16><00><00><00><00><00><00><16>s<16>