[yldZddlZddlZddlZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd lm Z dd lm Z d d lm Z d dlmZegdZejdejZejdejZdeddDdgZejdejZejdejZejdejZejdejZejdejZddddddZiejdej d ej!d!ej"d"ej#d#ej$d$ej%d%ej&d$ej'd&ej(d'ej)d(ej*d)ej+d*ej,d+ej-d,ej.d-ej/d.iej0d/ej1d0ej2d1ej3d2ej4d3ej5d4ej6d5ej7d6ej8d7ej9d8ej:d9ej;d:ej<d;ej=d<ej>d=ej?d>ej@d?ejAd@ejBdAejCdBiZDejEdCejFdDejGdEejHdFejIdGejJdHejKdIejLdJejMdKejNdLejOdMejPdNejQdOejRdPiZSdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`ZTe jUjVdae jUjWdbe jUjXdce jUjYdde jUjZdee jUj[dfiZ\Gdgdhe]Z^Gdidjej_ej`e]ZaGdkdle jbZcGdmdnedZeGdodpe^ZfGdqdrefZgGdsdte^ZhGdudveaZiGdwdxeiZjGdydze]ZkdS){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`. N)crud)elements) functions) operators)schema) selectable)sqltypes)visitors)exc)util)^allanalyseanalyzeandanyarrayasasc asymmetric authorizationbetweenbinarybothcasecastcheckcollatecolumn constraintcreatecross current_date current_role current_timecurrent_timestamp current_userdefault deferrabledescdistinctdoelseendexceptfalseforforeignfreezefromfullgrantgrouphavingilikein initiallyinner intersectintoisisnulljoinleadingleftlikelimit localtimelocaltimestampnaturalnewnotnotnullnulloffoffsetoldononlyororderouteroverlapsplacingprimary referencesrightselect session_usersetsimilarsome symmetrictablethentotrailingtrueunionuniqueuserusingverbosewhenwherez ^[A-Z0-9_$]+$z^[A-Z0-9_ $]+$c,h|]}t|S)str).0xs /srv/buildsys-work-dir/castor/build_node/builder-2/WGSG1/unpkd_srcs/cloudlinux-venv-1.0.6/venv/lib/python3.11/site-packages/sqlalchemy/sql/compiler.py rss;;;c!ff;;; $z5^(?:RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT)$z^(?:DEFERRED|IMMEDIATE)$z%(? z >= z = z IS DISTINCT FROM z IS NOT DISTINCT FROM z || z MATCH z NOT MATCH z IN z NOT IN ,  FROM  AS  IS z IS NOT z COLLATE zEXISTS DISTINCT zNOT zANY zALL z DESCz ASCz NULLS FIRSTz NULLS LASTcoalesce CURRENT_DATE CURRENT_TIMECURRENT_TIMESTAMP CURRENT_USER LOCALTIMELOCALTIMESTAMPrandomsysdate SESSION_USERUSERCUBEROLLUPz GROUPING SETSmonthdayyearsecondhourdoyminutequarterdowweekepoch milliseconds microseconds timezone_hourtimezone_minute)rrrrrrrrrrrrrrrUNIONz UNION ALLEXCEPTz EXCEPT ALL INTERSECTz INTERSECT ALLceZdZdZdZdZejZ ddejfdZ ej dddZ dZ e dZd Zd Zdd Ze d Zd ZdZdS)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. Nc||_||_|jj|_||_|r|j||_|@||_|j|_|jr |j |_ |j |jfi||_ dSdS)a|Construct a new :class:`.Compiled` object. :param dialect: :class:`.Dialect` to compile against. :param statement: :class:`_expression.ClauseElement` to be compiled. :param bind: Optional Engine or Connection to compile this statement against. :param schema_translate_map: dictionary of schema names to be translated when forming the resultant SQL .. versionadded:: 1.1 .. seealso:: :ref:`schema_translating` :param compile_kwargs: additional kwargs that will be passed to the initial call to :meth:`.Compiled.process`. N) dialectbindidentifier_preparerpreparerschema_translate_map_with_schema_translate statementsupports_execution can_execute_execution_optionsexecution_optionsprocessstring)selfrrrrcompile_kwargss rr__init__zCompiled.__init__s@   8 $8!   M@@$DM  &DN(;D  F)2)E&&$,t~HHHHDKKK ! rtz0.7zThe :meth:`.Compiled.compile` method is deprecated and will be removed in a future release. The :class:`.Compiled` object now runs its compilation within the constructor, and this method does nothing.cdS)z;Produce the internal string representation of this element.Nrnrs rrcompilezCompiled.compileDs  rtcp|jr||||Stj|jN)r_execute_compiledr ObjectNotExecutableErrorr)r connection multiparamsparamss rr_execute_on_connectionzCompiled._execute_on_connectionOs8   ?//k6JJ J.t~>> >rtct)zReturn a Compiled that is capable of processing SQL expressions. If this compiler is one, it would likely just return 'self'. NotImplementedErrorrs rr sql_compilerzCompiled.sql_compilerU"###rtc |j|fi|Sr_compiler_dispatch)robjkwargss rrrzCompiled.process_s%s%d55f555rtc|jpdS)z3Return the string text of the generated SQL or DDL.)rrs rr__str__zCompiled.__str__bs{ b rtct)zReturn 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. rrrs rrconstruct_paramszCompiled.construct_paramsgrrtc*|S)z0Return the bind params for this compiled object.rrs rrrzCompiled.paramsqs$$&&&rtcn|j}|tjdd||||S)zExecute this compiled object.Nz>This Compiled object is not bound to any Engine or Connection.2aficode)rr UnboundExecutionErrorr)rrres rrexecutezCompiled.executevsL I 9+!  ""4f===rtc@|j|i|S)zJExecute this compiled object and return the result's scalar value.)rscalar)rrrs rrrzCompiled.scalars't|[3F33::<< > >=====rtrc"eZdZdZdZdZdZdS) TypeCompilerz2Produces DDL specification for TypeEngine objects.z visit_\w+c||_dSr)r)rrs rrrzTypeCompiler.__init__s  rtc |j|fi|Srrrtype_kws rrrzTypeCompiler.processs'u'33333rtN)rrrr ensure_kwargrrrnrtrrrrs=<<L44444rtrcTeZdZdZdZdZd dZedZedZ dZ d S) _CompileLabelz;lightweight label object which acts as an expression.Label.label)elementnamernc8||_||_|f|z|_dSr)rr _alt_names)rcolr alt_namess rrrz_CompileLabel.__init__s"  &9,rtc|jjSr)r proxy_setrs rrrz_CompileLabel.proxy_sets |%%rtc|jjSr)rtypers rrrz_CompileLabel.types |  rtc |Srrn)rrs rr self_groupz_CompileLabel.self_groups rtN)rn) rrrr__visit_name__ __slots__rrrrrrnrtrrrrs}EEN!I---- &&X&!!X!rtrceZdZdZdZdS)prefix_anon_mapacA map that creates new keys for missing key access. Considers keys of the form " " to produce new symbols "_", where "index" is an incrementing integer corresponding to . Inlines the approach taken by :class:`sqlalchemy.util.PopulateDict` which is otherwise usually used for this type of operation. c|dd\}}||d}|dz||<|dzt|z}|||<|S)N r_)splitgetro)rkeyidentderivedanonymous_countervalues rr __missing__zprefix_anon_map.__missing__sa99S!,, HHWa00)A-W # $5 6 66S  rtN)rrrrr rnrtrrrrs-rtrceZdZdZeZeZdxZxZ Z dZ dZ dZ dZ dZ dZ dZ dZ dZ dZ dxZZ ddZedZedZejd Zejd Z d Z!ej"d Z#d Z$edZ%ddZ&edZ'ej(ddZ)dZ*ddZ+ ddZ, ddZ- ddZ.dZ/ ddZ0dZ1dZ2dZ3dZ4dZ5dZ6d Z7 dd!Z8d"Z9d#Z:d$Z;d%Zd(Z?d)Z@d*ZAd+ZBd,ZCd-ZDdd.ZEd/ZFd0ZGd1ZH dd3ZId4ZJd5ZKd6ZLd7ZMd8ZNd9ZOd:ZPd;ZQd<ZR dd=ZSd>ZTd?ZUd@ZVdAZWdBZX ddCZYdDZZdEZ[ej"dFZ\dGZ]dHZ^dIZ_dJZ`dKZadLZbdMZcdNZddOZedPZfdQZgdRZh ddSZidTZjdUZkdVZldWZmdXZn ddYZo ddZZp dd[Zqd\Zrdd]Zsd^Ztd_Zu dd`ZvdaZwdbZxdcZyddZzdeZ{dfZ|dgZ}ej~dhefdiefgZddjZ ddkZdlZdmZdnZdoZdpZdqZdrZdsZdtZduZdvZdwZ ddxZddyZdzZdd{Zd|Zd}Zd~ZddZej"dZdZdZddZdZdZdZdS) SQLCompilerz~Default implementation of :class:`.Compiled`. Compiles :class:`_expression.ClauseElement` objects into SQL strings. FNTrnc L||_|pt|dd|_i|_t j|_g|_g|_|j |_ |j rg|_ |j dk|_ t|j |_d|_|jp|j|_t%|_i|_t+j|||fi||js|js|jr|jr |j|_|j r|j r|dSdSdS)aConstruct a new :class:`.SQLCompiler` object. :param dialect: :class:`.Dialect` to be used :param statement: :class:`_expression.ClauseElement` to be compiled :param column_keys: a list of column names to be compiled into an INSERT or UPDATE statement. :param inline: whether to generate INSERT statements as "inline", e.g. not formatted to return any generated defaults :param kwargs: additional keyword arguments to be consumed by the superclass. inlineFr{N) column_keysgetattrrbindsr column_dict bind_namesstack_result_columns positional positiontup paramstyle_numeric_bindsBIND_TEMPLATES bindtemplatectes label_lengthmax_identifier_lengthranon_maptruncated_namesrrisinsertisupdateisdelete _returning returning_apply_numbered_params)rrrrrrs rrrzSQLCompiler.__init__s_&'C 8U C C  *,, "", ? B!D ")"4 "AD *7+=>   AG$A  ())  "$==f=== M 2!] 2.2m 2" 2'1DN ? *t2 *  ' ' ) ) ) ) ) * * * *rtc |jddS#t$r.}tjtd|Yd}~dSd}~wwxYw)aReturn the current 'executable' that is being compiled. This is currently the :class:`_sql.Select`, :class:`_sql.Insert`, :class:`_sql.Update`, :class:`_sql.Delete`, :class:`_sql.CompoundSelect` object that is being compiled. Specifically it's assigned to the ``self.stack`` list of elements. When a statement like the above is being compiled, it normally is also assigned to the ``.statement`` attribute of the :class:`_sql.Compiler` object. However, all SQL constructs are ultimately nestable, and this attribute should never be consulted by a ``visit_`` method, as it is not guaranteed to be assigned nor guaranteed to correspond to the current statement being compiled. .. versionadded:: 1.3.21 For compatibility with previous versions, use the following recipe:: statement = getattr(self, "current_executable", False) if statement is False: statement = self.stack[-1]["selectable"] For versions 1.4 and above, ensure only .current_executable is used; the format of "self.stack" may change. r z$Compiler does not have a stack entryreplace_contextN)r IndexErrorrraise_)ries rrcurrent_executablezSQLCompiler.current_executableZs}< :b>,/ /    KABB "           s A #AA c:t|j|jzSr)listinsert_prefetchupdate_prefetchrs rrprefetchzSQLCompiler.prefetchsD(4+??@@@rtcrtj|_i|_d|_|jr i|_dSdS)zInitialize collections related to CTEs only if a CTE is located, to save on the overhead of these collections otherwise. FN)r OrderedDictr ctes_by_namectes_recursivercte_positionalrs rr_init_cte_statezSQLCompiler._init_cte_statesF$&& # ? %"$D    % %rtc#@K|j|j}}gdc|_|_ |jr|jd}d|d<nd}|j|jfV|r|d||c|_|_dS#|r|d||c|_|_wxYw)z;special API to support the use case of 'nested result sets'Fr(Tneed_result_map_for_nestedN)r_ordered_columnsrpop)rresult_columnsordered_columnsentrys rr_nested_resultzSQLCompiler._nested_results   !(79%3d3 z  26:233&(== = = = 8 6777 8D $"7"7"7 8 6777 8D $"7    s ,A55(Bcvtjdtjdfd|j|_dS)Nrz \[_POSITION\]cFttjSr)rornext)mposcounts rrz4SQLCompiler._apply_numbered_params..sDIh,?,?(@(@rt) itertoolscountresubr)rrFs @rrr&z"SQLCompiler._apply_numbered_paramss<?1%%f @@@@$+   rtcXtdfdjDDS)Nc3(K|] \}}|||fVdSrrn)rprr s rr z/SQLCompiler._bind_processors..s@   U %L!      rtc3pK|]0}j||jjfV1dSr)rr_cached_bind_processorr)rp bindparamrs rrrNz/SQLCompiler._bind_processors..sZ OI.N99$,GGrt)dictrrs`rr_bind_processorszSQLCompiler._bind_processorssX    "&       rtc2t|jdkSNr)lenrrs rr is_subqueryzSQLCompiler.is_subquerys4:""rtc|Srrnrs rrrzSQLCompiler.sql_compilers rtcl|ri}|jD]}|j|}|j|vr||j||<)||vr ||||<9|rG|jr@|r tjd|j|fzdtjd|jzd|jr |j||<|j||<|Si}|jD]}}|rG|jr@|r tjd|j|fzdtjd|jzd|jr|j||j|<h|j||j|<~|S)z5return a dictionary of bind parameter keys and valuesz@A value is required for bind parameter %r, in parameter group %dcd3xrz)A value is required for bind parameter %r)rrrequiredr InvalidRequestErrorcallableeffective_valuer )rr _group_number_checkpdrQrs rrrzSQLCompiler.construct_paramss 3 B!_ / / y1=F**%im4BtHHV^^%d|BtHH/ 2/$ !54(}m<="( "5G'm,!' '/(8BtHH(BtHHIB!_ E E  i0 $ !54(}m<="( "5G'm,!' %E5>5NBty1225>_Bty122Irtc.|dS)zoReturn the bind param dictionary embedded into this compiled object, for those values that are present.F)r`rrs rrrzSQLCompiler.paramss$$E$222rtzsqlalchemy.engine.resultc@|j|jS)z(utility method used for unit tests only.)ResultMetaData_create_result_mapr)rresults rrrezSQLCompiler._create_result_maps$778LMMMrtcdS)zCalled 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. rrnrs rr default_fromzSQLCompiler.default_froms rrtc 4d|jj|fi|zdzS)N()rr)rgroupingasfromrs rrvisit_groupingzSQLCompiler.visit_groupings+8X%8HHHHH3NNrtc (|jrw|jjrk|jdd}|j\}}}|r|}n|}|jj} | 8| j|vr/| || jr|jj|d<|j|jfd|i|S)Nr(r render_label_as_labelwithin_columns_clause) rrsupports_simple_order_by_label_label_resolve_dictr_order_by_label_elementrshares_lineager) rrrrrr with_cols only_froms only_cols resolve_dict order_by_elems rrvisit_label_referencez!SQLCompiler.visit_label_references : <$,E <B 5J/9/M ,Iz9$ )) ( $OCM)!&,66!00 !347O;+t| O  "7    rtc d|js||jS|jdd}|j\}}} |r||j}n ||j}||d<|j|fd|i|S#t $r2} t j|jtj d| Yd} ~ dSd} ~ wwxYw)Nr(r rqrrzECan't resolve label reference for ORDER BY / GROUP BY / DISTINCT etc.)err) rr _text_clausertrKeyErrorr_no_text_coercionr CompileError) rrrrrr rwrxryrkes rrvisit_textual_label_referencez)SQLCompiler.visit_textual_label_reference6sz 6<< 455 5Z^L1 +5+I( :y $ 1 10/2F* +4<+@DJ      & +            sA33 B/='B**B/c |o| }||u}|s|rBt|jtjr|d|j} n|j} |rn|"|| |j|| f|jz|j|jj|fddd|ttj z|j || zS|r|j || S|jj|fddi|S)NcolidentT)rrwithin_label_clauserrF) isinstancerr_truncated_label_truncated_identifierrrrr OPERATORSras_r format_label) rradd_to_result_maprrrrqrrender_label_with_asrender_label_only labelnames rr visit_labelzSQLCompiler.visit_labelRsa " =*=&= 2U:  ' 4 '%*h&?@@ ' 66z5:NN !J   ,!!JI&)99J 1 0*.(,  IM* +-,,UI>>?  =--eY?? ?35=3,157 rtc*tjd)Nz:Cannot compile Column object until its 'name' is assigned.r rrr s rr_fallback_column_namez!SQLCompiler._fallback_column_names K   rtc |jx}}|||}|j}|s0t|tjr|d|}|||||||jf|j|r| |}n|j |}|j }| |r|j s|S|j |} | r|j | dz} nd} |j} t| tjr|d| } | |j | zdz|zS)Nr.ralias)rr is_literalrrrrrrescape_literal_columnrquoteranamed_with_columnschema_for_object quote_schema) rr r include_tablerr orig_namerraeffective_schema schema_prefix tablenames rr visit_columnzSQLCompiler.visit_columns";&y <--f55D&  @jx/HII @--j$??D  (  i&$ !;V[     ---d33DD=&&t,,D  = =U5L=K#}>>uEE  #M../?@@3F !#  I)X%>?? K 66w JJ  4=#6#6y#A#AACG$N Nrtc @|j|jSr)rformat_collation collation)rrrs rrvisit_collationzSQLCompiler.visit_collations}--g.?@@@rtc |jSrr)r fromclausers rrvisit_fromclausezSQLCompiler.visit_fromclauses rtc |jSrr)rindexrs rr visit_indexzSQLCompiler.visit_indexs zrtc F||d<|jjj|jfi|S)Ntype_expression)r type_compilerrr)r typeclausers rrvisit_typeclausezSQLCompiler.visit_typeclauses/ * 1t|)1*/HHRHHHrtcJ|jjr|dd}|SN%%%r_double_percentsreplacertexts rrpost_process_textzSQLCompiler.post_process_text' = ) +<<T**D rtcJ|jjr|dd}|Srrrs rrrz!SQLCompiler.escape_literal_columnrrtc fd}jsd_tdt|jS)Nc|d}|jvrjj|fiSj|fiSrU)r8 _bindparamsrbindparam_string)rErrr textclauses rr do_bindparamz2SQLCompiler.visit_textclause..do_bindparams]771::Dz---#t|J$:4$@GGBGGG,t,T88R888rtTc,|dSrU)r8)rEs rrrGz.SQLCompiler.visit_textclause..saggajjrt)r isplaintextBIND_PARAMS_ESCrK BIND_PARAMSrr)rrrrs``` rrvisit_textclausezSQLCompiler.visit_textclauses 9 9 9 9 9 9 9z $#D "" OOd44Z_EE     rtc Z|j }|r|jn |jd}|p1|dko|ddp|dd}|r:|jx|_|_|jD]} || d|j |j|j fi|} |r|rd| z} | S) Nr(rneed_result_map_for_compoundFr;Trrr(%s)) r_default_stack_entryrrr<_textual_ordered_columns column_argsr_add_to_result_mapr) rtafcompound_indexrnparensrtoplevelr@populate_result_mapcrs rrvisit_text_as_fromzSQLCompiler.visit_text_as_fromsz>-5I))4:b>  >!#EII yy5u==    D !-_   *.&*&= t|CK..2..  !f !D=D rtc dS)NNULLrnrexprrs rr visit_nullzSQLCompiler.visit_nullvrtc "|jjrdSdS)Nre1rsupports_native_booleanrs rr visit_truezSQLCompiler.visit_trues < / 63rtc "|jjrdSdS)Nr10rrs rr visit_falsezSQLCompiler.visit_falses < / 73rtc |j}|d}nt|j}|dfd|jDD}|jrjjrd|z}|S)Nrc3K|]}||V dSrrnrpss rrrNz/SQLCompiler.visit_clauselist..s>          rtc34K|]}|jfiVdSrr)rprrrs rrrNz/SQLCompiler.visit_clauselist..sJ56$$T00R00rtzVALUES )operatorrrBclauses _tuple_valuesrtuple_in_values)r clauselistrseprs` ` rrvisit_clauselistzSQLCompiler.visit_clauselist s! ;CCJ/0Cxx  :D:L       # $ (D $t#D rtc d}|j||jj|fi|dzz }|jD].\}}|d|j|fi|zdz|j|fi|zdzz }/|j|d|jj|fi|zdzz }|dz }|S)NzCASE rzWHEN z THEN zELSE END)r rwhenselse_)rclauserrqcondrfs rr visit_casezSQLCompiler.visit_cases  < # 00@@@@3F FA"L  LD& )$)$99&99:,&+D;;F;;<  AA < # 9&,9$II&IIICO A U rtc (|jj|fi|Sr)typed_expressionr)r type_coercers rrvisit_type_coercezSQLCompiler.visit_type_coerce.s >{+>tJJrJJJrtc Xd|jj|fi|d|jj|fi|dS)NzCAST(rrk)rrr)rrrs rr visit_castzSQLCompiler.visit_cast1sN *DK *4 : :6 : : : : .DO .t > >v > > > >  rtc d|dtjurdn|dtjurdnj|ddkr6|jtjt |dfi|dn(|jtj|dfi|dd|dtjurdn|dtjurdnj|ddkr6|jtjt |dfi|dn(|jtj|dfi|dS) NrzUNBOUNDED PRECEDINGz CURRENT ROWz PRECEDINGz FOLLOWINGr}rzUNBOUNDED FOLLOWING)rRANGE_UNBOUNDED RANGE_CURRENTrliteralabs)rrange_rs rr_format_frame_clausez SQLCompiler._format_frame_clause7sayH444 " !ayH222ay1}}t|H,S^^<<CCCCCCFFt|H,VAY77>>2>>>>A A AayH444 " !ayH222ay1}}t|H,S^^<<CCCCCCFFt|H,VAY77>>2>>>>A A  rtc $|jrdj|jfiz}n |jrdj|jfiz}nd}|jjfiddfdd|jfd|jffD|r|gngzdS) NzRANGE BETWEEN %szROWS BETWEEN %sz OVER (rc ^g|])\}}|t||d|jfi*S)Nz BY )rVr)rpwordrrrs rr z*SQLCompiler.visit_over..]sc%f)c&kk) tt6V6tFFvFFFH *))rt PARTITIONORDERrk)rr rowsrrrB partition_byorder_by)roverrrs` ` rr visit_overzSQLCompiler.visit_overNs! ; '*C$*C ++%++FFY &)B)B **#**FFF ,DL +D ; ;F ; ; ; ; HH%d&78 $-0) &-F882 /      rtc V|jj|fi|d|jj|fi|dS)Nz WITHIN GROUP (ORDER BY rk)rrr)r withingrouprs rrvisit_withingroupzSQLCompiler.visit_withingroupjsN 2K  24 B B6 B B B B 3K 3D C CF C C C C  rtc V|jj|fi|d|jj|fi|dS)Nz FILTER (WHERE rk)funcr criterion)r funcfilterrs rrvisit_funcfilterzSQLCompiler.visit_funcfilterpsM .JO .t > >v > > > > 3J 3D C CF C C C C  rtc |j|j|j}d|d|jj|fi|dS)NzEXTRACT(rrk) extract_maprfieldrr)rextractrrs rr visit_extractzSQLCompiler.visit_extractvsQ $$W]GMBB EE +GL +D ; ;F ; ; ; ;  rtc >|||j|jd|jtd|jzd}|r ||fi|St|jdr |jrdz n\|jj sttj rj ndzdfd|jDgzdj|fi|izS)Nrnz visit_%s_funcz%(expr)srcg|]R}j|sttjrj|n|SSrn)r_requires_quotes_illegal_charsrr quoted_namer)rptokrrs rrr z.SQLCompiler.visit_function..so  =GGLL!%dH,@AA! ++C000! rtr)rrrlower FUNCTIONSr __class__ _has_argsrr$rrr%rrB packagenamesfunction_argspec)rrrrdisprs` @rrvisit_functionzSQLCompiler.visit_function}sv  (  diB B B Bt_ty/@/@@$GG  @4'''' '==66D )>'J&Dy}CCDII!$(<==DM''---  j(88 $0&   ..t>>v>>? @ @rtc 6||jSr)visit_sequencesequence)r next_valuers rrvisit_next_value_funcz!SQLCompiler.visit_next_value_funcs"":#6777rtc :td|jjz)Nz2Dialect '%s' does not support sequence increments.rrr)rr1rs rrr0zSQLCompiler.visit_sequences$! @l    rtc (|jj|fi|Sr) clause_exprr)rrrs rrr,zSQLCompiler.function_argspecs 2t24BB6BBBrtrc j }|rjn jd}|p|dko|dd}j|d|d||dj|j} d| zdzfd t|jD} | j |fitdd iz } | j |fiz } | |j dus |j durj|fipd z } jr|r| z} jdr |rd | zd zS| S)Nr(rrFcorrelate_froms asfrom_froms)r9r:r rrc3BK|]\}}|jfd|dVdS)F)rnrrNr)rpirrnrrs rrrNz4SQLCompiler.visit_compound_select..sl  Aq%$! #$         rtrnrrjrkrn)rrrappendcompound_keywordskeywordrB enumerateselectsgroup_by_clauserRorder_by_clause _limit_clause_offset_clause limit_clauser_render_cte_clauser=) rcsrnrrrrr@need_result_mapr?rs ` ` ` rrvisit_compound_selectz!SQLCompiler.visit_compound_selectsz>-5I))4:b>" a  A 8%@@  #():#; %n 5 0?      (,,RZ88g #))      &bj11       $$RII4+H+Hv+H+H+HIII $$R226222  T ) JR->d-J 0!!"////   9 4 4**,,t3D r  f :# #KrtcPd|jd||rd|znd}t||dS)Nvisit_rr)rr)r operator_ qualifier1 qualifier2attrnames rr_get_operator_dispatchz"SQLCompiler._get_operator_dispatchsE     J * 2C*   2  tXt,,,rtc |jrg|jrtjd||jdd}|r|||jfi|S|j|t |jfi|S|jrL||jdd}|r|||jfi|S|j|t |jfi|Stjd)NzFUnary expression does not support operator and modifier simultaneouslyunaryrmodifierz,Unary expression has no operator or modifier)rrTr rrQ _generate_generic_unary_operatorr _generate_generic_unary_modifier)rrSrr-s rr visit_unaryzSQLCompiler.visit_unarys@ > ~ &2..D tE5>88R88888R888 rtc z|js |jjr|j|jfi|Sd|j|jfi|zS)Nz%s = 1_is_implicitly_booleanrrrrrrrrs rrvisit_istrue_unary_operatorz'SQLCompiler.visit_istrue_unary_operators[  * B|3 B 4<66266 6ldl7?AAbAAA Artc |js |jjrd|j|jfi|zSd|j|jfi|zS)NNOT %sz%s = 0rYr[s rrvisit_isfalse_unary_operatorz(SQLCompiler.visit_isfalse_unary_operators`  * B|3 Bldl7?AAbAAA Aldl7?AAbAAA Artc Jd||tjzS)Nr^)override_operator) visit_binaryrmatch_oprrrrs rrvisit_notmatch_op_binaryz$SQLCompiler.visit_notmatch_op_binarys.$++ i&8,    rtc.tjddS)NzThe IN-predicate was invoked with an empty sequence. This results in a contradiction, which nonetheless can be expensive to evaluate. Consider alternative strategies for improved performance.)rwarnrs rr_emit_empty_in_warningz"SQLCompiler._emit_empty_in_warnings%  3     rtc |jjrdS|jjr|||j|jkS)Nz1 != 1r_use_static_in_warn_on_empty_inrhrrDrds rrvisit_empty_in_op_binaryz$SQLCompiler.visit_empty_in_op_binary%sN < & <8|- .++---<< v{ :;; ;rtc |jjrdS|jjr|||j|jkS)Nz1 = 1rjrds rrvisit_empty_notin_op_binaryz'SQLCompiler.visit_empty_notin_op_binary-sN < & <7|- .++---<< v{ :;; ;rtc:td|jjz)Nz3Dialect '%s' does not support empty set expression.r5)r element_typess rrvisit_empty_set_exprz SQLCompiler.visit_empty_set_expr5s$! Al    rtc |jrCt|jtjr$t|jtjrd|d<|p|j}||dd}|r |||fi|S t|}|j ||fi|S#t$r4}tj tj|||Yd}~dSd}~wwxYw)NT literal_bindsrr))ansi_bind_rulesrrDr BindParameterrZrrQr_generate_generic_binaryrrr,r UnsupportedCompilationError) rrraeager_groupingrrMr-opstringr~s rrrbzSQLCompiler.visit_binary;s+   '6;(>?? '6<)?@@ ' #'B %8 **9hEE  M4 00R00 0 M$Y/5t4VXLLLLL     3D)DD$' s8 B C)C  Cc (|j|jfi|Sr)r sql_functionr[s rr&visit_function_as_comparison_op_binaryz2SQLCompiler.visit_function_as_comparison_op_binaryVst|G077B777rtc |jjr*|j|jfi|dz|j|jfi|zS|j|jfi|dz|j|jfi|zS)Nz %% r~)rrrrDrZrds rrvisit_mod_binaryzSQLCompiler.visit_mod_binaryYs = )  V[//B//$,v|22r223  V[//B//$,v|22r223 rtc J|j|d<|j|d|jzdzfi|S)Nryr)ryrwrzr[s rrvisit_custom_op_binaryz"SQLCompiler.visit_custom_op_binarygsF'6 ,t, S8,,s2  68   rtc 0|j||jdzfi|SNr)rUrzr[s rrvisit_custom_op_unary_operatorz*SQLCompiler.visit_custom_op_unary_operatorms34t4 X&,  02   rtc 0|j|d|jzfi|Sr)rVrzr[s rrvisit_custom_op_unary_modifierz*SQLCompiler.visit_custom_op_unary_modifierrs34t4 S8,,  02   rtc |dd}d|d<|jj|fd|i||z|jj|fd|i|z}|r|rd|z}|S)N _in_binaryFTryr)rrDrrZ)rrrzryrrrs rrrwz$SQLCompiler._generate_generic_binarywsVVL%00 < *FK *  %3 79   .fl-%379     !. !D=D rtc .||jj|fi|zSrrlrrSrzrs rrrUz,SQLCompiler._generate_generic_unary_operators%:%-:4FF2FFFFrtc .|jj|fi||zSrrlrs rrrVz,SQLCompiler._generate_generic_unary_modifiers$/u}/;;;;hFFrtcBtjdtjS)Nz'%')r)rliteral_columnr STRINGTYPErs rr_like_percent_literalz!SQLCompiler._like_percent_literals&uH4GHHHHrtc |}|j}||j||_|j||fi|Sr_cloner__add__rZvisit_like_op_binaryrrrrpercents rrvisit_contains_op_binaryz$SQLCompiler.visit_contains_op_binarysW,v|44<..t|<>$-00 x==4,q0 0 0*..{A>>GS!2Q!6:::;g,,qrr"#  18! D  - - I4=k401rtc||jzSr)rrrs rr _anonymizezSQLCompiler._anonymizejsdm##rtc |jr2|||n|j||r d|_d|zS|jd|izS)NTz([EXPANDING_%s])r)rr=rcontains_expanding_parametersr)rrpositional_namesrrs rrrzSQLCompiler.bindparam_stringmso ? .+ ''---- ''---  615D .%, ,$~5 5rtc ||d<t|jtjrd|j}n|j}d}d} |jvrJj|} || u} || jvs|| urd}n)| |jvr j| =ntj d|z|s|rO|j D|j } |j j} t| tjrd| } n|} d} |r|j|<d|j j vr:djvr1jd|j j di_| jvrj| fi|| sP|jvrF|jrd_j||} |jrt|jt,jr|j}n4t|jt,jr|jjd}nJdt5j|jD}| d d fd |Dzz } jrgx|d <j|<| d j ||j!fi|d|jj"fddi|z } |j#r| dj ||j#fi|zz } | j|<|r|s| rj||S| rij|| } j$|rj%|}| &|z } | Sj||SdS)N visiting_cterTFz5Multiple, unrelated CTEs found with the same name: %r autocommitrcg|]}||Srrnrprs rrr z)SQLCompiler.visit_cte..s%"""=(==rtrrc3LK|]}j|VdSr)r format_column)rprrs rrrNz(SQLCompiler.visit_cte..sG"" %!M77>>""""""rtrr rnr)'r9rrrrrr6 _restatesrr r _cte_aliasrrrrf visit_cte recursiver7r format_aliasoriginalr SelectCompoundSelectrAr unique_list inner_columnsrBrr8_generate_prefixes _prefixesr _suffixes_requires_quotesrget_render_as_alias_suffix)rcternashint fromhintsrrcte_name is_new_cteembedded_in_current_named_cte existing_cte pre_alias_ctecte_pre_alias_namer col_source recur_colss` rrrzSQLCompiler.visit_cte{s !$~ ch 9 : : 11'38DDHHxH (-% t( ( (,X6L,8L,H )l,,,|0C0C" ..Il++&(*23  *Z *~) # %(^%8"0(2KLL)-)C)C!3**&!$ %)" : &*-D h ' >>> (>>>)-)?)E)E$ck&D('**&DI--}77777%' &#TY*>*>=/*.D'}11#x@@=!#, 0ABB%%(\ #CL*2KLL%%(\%9!%< $u""!%!1*2J!K!K"""J F """")3"""D?OLNNF-.1DS1I+D+CII&IIII3CL3%)-3=C"9$"9S]##.4##D"& #  A A"? A}11#x@@@! A}11#7IJJ=11(;;=#}228<4TDDVDD Drtc .d|d<d|j|fi|zS)NTlateralz LATERAL %s)r)rrrs rr visit_lateralzSQLCompiler.visit_laterals,9 .d.w=="====rtc |j|fddi|d|j|fi|}|j|d|jj|fi|zz }|S)NrnTz TABLESAMPLE z REPEATABLE (%s))r _get_methodrseed)r tablesamplernrrs rrvisit_tablesamplezSQLCompiler.visit_tablesamples D [ < < < < < < < 8K # # % % 8 D D D D D    ' &3  3D??B?? D rtc d|zS)Nrrn)ralias_name_texts rrrz&SQLCompiler.get_render_as_alias_suffix)s ''rtcB|j||||fdSr)rr=)rkeynamerobjectsrs rrrzSQLCompiler._add_to_result_map,s( ##WdGU$CDDDDDrtc  jj} | jr%|s|r!| } |rfd} nd} n} |rj} nd} |s| } nt tjr'| urt| j j f} nL| } nH||rt| |j f} n*|rwt tj r]jsVjOt jt js0t| tjj jf} nt tjsat tjrjr@t/drt t0jrt| j} n6| ur0t| tjj jf} n| } ||| | jfi|S)z.produce labeled columns present in a select().c@||f|z|dSr)r)rrrrr rs rrrz;SQLCompiler._label_select_column..add_to_result_mapEs5++y7':ErtN)rrr)rrr_has_column_expressioncolumn_expressionrrrLabelrrr _key_label ColumnClauserrar r _as_truncatedr TextClauseUnaryExpressionwraps_column_expressionhasattrrFunction anon_labelupdater) rr[r rrncolumn_clause_argsrrrneed_column_expressionsrcol_exprr result_exprs ` ` rr_label_select_columnz SQLCompiler._label_select_column/s{'' 55  & ) # )': )--f55H" ) %)!!H" )$($;!!$(!$0 #"KK  / /. #v%%+fkfn5F '  D '$6+<*>KK ! #68#899! #%! # (v|Z->??)(&v{33!:-KK 68#677 #vx'?@@ #1  #FF++ #fi&899 #(&2CDDKK V # #(&v{33!:-KK #K!!"7/ "   .{-dII6HIIIrtcF|||}|r|d|zz }|Sr)get_from_hint_text)rsqltextrahintrhinttexts rrrz!SQLCompiler.format_from_hint_texts2**5$77  & sX~ %GrtcdSrrn)rbyfromss rrget_select_hint_textz SQLCompiler.get_select_hint_texttrtcdSrrnrrars rrr%zSQLCompiler.get_from_hint_textr,rtcdSrrnr.s rrget_crud_hint_textzSQLCompiler.get_crud_hint_textr,rtc,d|SrrB)r hint_textss rrget_statement_hint_textz#SQLCompiler.get_statement_hint_textsxx ###rtc6iigfd|S)zRewrite 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 < 3.7.16). c| dvr d|S| vr |S|x} |<|jr|jrt|jt jrt| |jfi||_ |jfi|}t j |j gd }|j D]}|j |_|j|_t#t%|jj j |j }|||j j<|||j j<|||jj j<|||jj j<t' dD]\}}||vr|| d|< d|||_ |jfi||_n|jrd|d<|jdd i|nh|jrR|jrK|dddk} | r id|d<|jdd i|| r d=n|jdd i||S) Nr(T) use_labelsselect_containertransform_clueclone inside_selectrn)r is_selectable_is_joinrrZr FromGrouping_reset_exportedrDrrrrrrr_labelrRzipr0itemsronclause_is_from_container_copy_internals _is_selectrr=) rrnewelemrZ selectable_rtranslate_dictkvbarrier_selectclonedcolumn_translatevisits rrrOz=SQLCompiler._transform_select_for_nested_joins..visits*2...'+G44F""g&(/(8(8 8GfWo%D ;$D ;w}j.EFFD ; '')))$uW\88R88 gm22r22(/]O%''%&&A#$5AL vAHH!% -/??""6Au}126Au}23=Hw}49:>Iw}4:;!!1"!5!;!;!=!=>>DDDAqN**3A2C(,Q/ $++N;;; + #(5)9#@#@R#@#@  + ;(:#$''::e:r::::& ;7+= ;FF+T226HH "0$++B///'6#$''::e:r:::!-(,''::e:r:::Nrtrn)rr[rMrNrOs @@@rr"_transform_select_for_nested_joinsz.SQLCompiler._transform_select_for_nested_joinssO4O O O O O O O buV}}rtctd|jDtfd|jDfd|jD|_dS)Nc3(K|] }|j|fVdSrrrs rrrNzESQLCompiler._transform_result_map_for_nested_joins..s:  "#Q\1       rtc36K|]}|j|fVdSrrS)rpr inner_cols rrrNzESQLCompiler._transform_result_map_for_nested_joins..s/LL!)AL)1-LLLLLLrtcXg|]&\}}}}||tfd|D|f'S)c<g|]}||Srnr)rprds rrr zQSQLCompiler._transform_result_map_for_nested_joins...s%???3quuS#???rttuple)rprrobjstyprYs rrr zFSQLCompiler._transform_result_map_for_nested_joins..sW   $T4$????$???@@# F   rt)rRrr)rr[transformed_selectrYrUs @@rr&_transform_result_map_for_nested_joinsz2SQLCompiler._transform_result_map_for_nested_joinss  '9'G      LLLLv7KLLL L L    (,(<   rtr9r:c|j }|r|jn |jd}|d}|d}|r-|s+|||d}n|||}|S)Nr(r9r:rnexplicit_correlate_fromsimplicit_correlate_froms)rr_get_display_froms difference) rr[rnrrr@r9r:fromss rr_display_froms_for_selectz%SQLCompiler._display_froms_for_select s z>-5I))4:b> 12^,  ' --)8)C)C ***, .EE--)8)5.E rtc Fjo| oj o jj } | r)} j| f|||dd| } j } | rjn jd}| p+|ddp|ddx|dkrdsd| vr| d=| rr| | S ||}|  ddd d } j r# \}}|r| |d zz } nd}jr| jjfi| z } | jfi| z } d fd jDD}rU|St%t'djDd|jDfdjD_| |||| } jr0fdjD}|r| d |zz } jr| r| z} jr| d jjfi| zz } jds|r |rd| zdzS| S)NT)rnrrrnested_join_translationr(rFr;rr)rrrzSELECT rcg|]}||Srrnrs rrr z,SQLCompiler.visit_select..us)   } }}rtc Ng|]!\}}||"S))rr r#) rprr rnrr rr[rs rrr z,SQLCompiler.visit_select..wsY   !D&))'&,C*   rtcg|]\}}|Srnrnrprrs rrr z,SQLCompiler.visit_select..sHHHksDTHHHrtcg|]\}}|Srnrnrns rrr z,SQLCompiler.visit_select..s,'S$rtcXg|]&\}}}}||tfd|D|f'S)c3DK|]}||VdSrrX)rpo translates rrrNz6SQLCompiler.visit_select...s1!C!C!)--1"5"5!C!C!C!C!C!CrtrZ)rprrrrrss rrr z,SQLCompiler.visit_select..sW$$$)CsEdE!C!C!C!Cs!C!C!CCCUK$$$rtc:g|]\}}|djjfv|S*rr)rp dialect_namehtrs rrr z,SQLCompiler.visit_select..s<&\2C):#;;;;;;rtrjrk)r7rrsupports_right_nested_joinsrP visit_selectrrr__setup_select_stackcopyr_hints_setup_select_hintsrrget_select_precolumns_columns_plus_namesrRrAr_compose_select_body_statement_hintsr4rrGrr=)rr[rnrrrriselect_wraps_forrrneeds_nested_translationr^rrr@rf hint_textbyfromr per_dialectrr rrss``` @@@@rrr{zSQLCompiler.visit_select%sb   =++ =J =L<< ! $ !%!H!H"" %4$"#-(, Dz>-5I))4:b>  >yy7?? >yy5u== 5 A  "'  # ,':f'D'D*+ # " ;;.K((HH#[[]]!!$)E J J    =  $ 8 8 @ @ Iv ( C'F   P +D+FF4DOOOO OD **6<      "  #3#?HHV-GHHH+;+OI$$$$-1-A$$$D (( &-    " H*0*AK  Hd::;GGGG 9 4 4**,,t3D    C1$1(,2 D r  g 6 :# #Krtctfd|jD}|}||fS)Nc xg|]6\\}}}|djjfv||d|dizf7S)rvrT)rrrr)rpfrom_rr(rs rrr z3SQLCompiler._setup_select_hints..sn    /$UGhsDL$5666 u77T7JJKL 766rt)rRr~rBr+)rr[rrs` rrrzSQLCompiler._setup_select_hintssh     39-2E2E2G2G       --f55 &  rtcR|d}|d}|r-|s+|||d}n|||}ttj|}||} || |d} |j| |S)Nr9r:rnra)r:r9r )rdrer]r _from_objectsrfrr=) rr[r@rnrr9r:rfnew_correlate_fromsall_correlate_froms new_entrys rrr|zSQLCompiler._setup_select_stacks 12^,  ' --)8)C)C ***, .EE--)8)5.E "*":E"BCC177HH02   )$$$ rtc|d|z }|rY|dz }|jr'|dfd|Dz }n=|dfd|Dz }n|z }|j|jjfi}|r|d|zz }|jjr|j|fiz }|j|jjfi}|r|d|zz }|j jr|j |fiz }|j |j |j |fiz }|j|j|fiz }|S)Nrz FROM c2g|]}|jfddS)Trnrr)rpfrrrs rrr z4SQLCompiler._compose_select_body..sT-, )-CIrtc0g|]}|jfddiS)rnTr)rprrrs rrr z4SQLCompiler._compose_select_body..sC-,TII$I&IIrtz WHERE z HAVING )rBr~rh _whereclauser_group_by_clauserrB_having_order_by_clauserCrDrErF_for_update_argfor_update_clause)rrr[rrfrrts` `` rrrz SQLCompiler._compose_select_bodys  -(((  ( J D}  "'  !& D%%'' 'D   *6#6tFFvFFA ( a'  " * ; (D(::6:: :D > %11$AA&AAA ) q((  " * ; (D(::6:: :D  ,$0 %D%f7777 7D  ! - *D*6<. s]  $ #|t|7H'H'H &F %d 1 1b 1 1'H'H'H'H  rtr2)rstmtprefixesrrs` ` rrrzSQLCompiler._generate_prefixes sZ     (0        cMF rtc(jr.tfdjDgjz_jdz}|ddjDz }|dz }|S)Nc*g|]}j|Srn)r8)rprrs rrr z2SQLCompiler._render_cte_clause..$ s!CCC#T(-CCCrtr, cg|]}|Srnrn)rptxts rrr z2SQLCompiler._render_cte_clause..( s C C C C C Crtz )rsumrrget_cte_preambler7rBvalues)rcte_texts` rrrGzSQLCompiler._render_cte_clause! s ? CCCCCCCRHH"#  (()<==CFKK C C 0@0@0B0B C C CDDDErtc|rdSdS)NzWITH RECURSIVEWITHrn)rrs rrrzSQLCompiler.get_cte_preamble, s  ##6rtc |jrdpdS)zcCalled when building a ``SELECT`` statement, position is just before column list. rr) _distinctrr[rs rrrz!SQLCompiler.get_select_precolumns2 s /K525rtc :|jj|fi|}|rd|zSdS)z5allow dialects to customize how GROUP BY is rendered.z GROUP BY r)rr)rr[rgroup_bys rrrBzSQLCompiler.group_by_clause9 9>6*=dIIbII  (* *2rtc :|jj|fi|}|rd|zSdS)z5allow dialects to customize how ORDER BY is rendered.z ORDER BY r)rr)rr[rrs rrrCzSQLCompiler.order_by_clauseB rrtc dS)Nz FOR UPDATErnrs rrrzSQLCompiler.for_update_clauseK s}rtc*tjd)Nz@RETURNING is not supported by this dialect's statement compiler.r)rrreturning_colss rrreturning_clausezSQLCompiler.returning_clauseN s ,   rtc d}|j|d|j|jfi|zz }|j%|j|dz }|d|j|jfi|zz }|S)Nrz LIMIT z LIMIT -1z OFFSET )rDrrE)rr[rrs rrrFzSQLCompiler.limit_clauseT s}   + K,$,v/C"J"Jr"J"JJ JD  ,#+ % Jf.C!J!Jr!J!JJ JD rtc P|s|r|j|}|r@|r>|j|dz|j|jz} n|j|j} |r"||vr|| ||||} | SdS)Nrr)rrrrrr) rrarnrrr use_schemarrrs rr visit_tablezSQLCompiler.visit_table^ s  V #}>>uEE  6. 6M../?@@m))%*556 m))%*55 Ui//00 % 0&J2rtc |jrd}n |jrd}nd}|jj|fddi||z|jj|fddi|zdz|jj|fi|zS)Nz FULL OUTER JOIN z LEFT OUTER JOIN z JOIN rnT ON )r6isouterrDrrZrC)rrBrnr join_types rr visit_joinzSQLCompiler.visit_join{ s 9 !+II \ !+II I (DI ( E Ed Ef E E +dj+DHHHHH I /dm.t>>v>>  ? rtctfd|jD}|j|vr(||j||jd}||fS)NcDg|]\\}}}|djjfv||fSrurw)rprarrrs rrr z1SQLCompiler._setup_crud_hints.. sF   /$UGisDL$5666 "666rtT)rRr~rBrar)rr table_text dialect_hintss` rr_setup_crud_hintszSQLCompiler._setup_crud_hints s    37;3D3D3F3F      : & &33DJ dj(A4Jj((rtc |j }|jtt|dtj||tjfi|}|s9|jjs-|jjs!tj d|jj z|j r6|jj s!tj d|jj z|d}n|}|j|jj}d}|jr||j||jfi|z }|dz }|j} |jr||| \} } || z }|s|s'|ddfd |Dzz }|js|jr2|||jp|j} |jr|d | zz }nd} |jN|j|jfi|} |jr+|r)|jjr|d || z }np|d | zz }ng|s|r|d z }n]|j r&|d dd|Dzz }n0dd|D} |d| zz }|r| |_ |j!|j|j!fi|}|r|d |zz }| r|js|d | zz }|jr%|r#|jjs||z}|j"d|rd|zdzS|S)Nr9r:r zWThe '%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 z (%s)rcFg|]}|dS)r)r)rprrs rrr z,SQLCompiler.visit_insert.. s+JJJ!''!--JJJrtrz %sz DEFAULT VALUESz VALUES %sc3ZK|]&}ddd|DzV'dS)rrc3&K|] }|dV dS)rNrnrs rrrNz5SQLCompiler.visit_insert... s&'E'E!'E'E'E'E'E'ErtNr2)rpcrud_param_sets rrrNz+SQLCompiler.visit_insert.. sV&dii'E'En'E'E'EEEFrtcg|] }|d S)rrnrs rrr z,SQLCompiler.visit_insert.. s2M2M2MA1Q42M2M2Mrtz VALUES (%s)r(rjrk)#rr=r]r_setup_crud_paramsISINSERTrsupports_default_valuessupports_empty_insertr rr_has_multi_parameterssupports_multivalues_insertrrr format_tablerar~rrBr%r$rreturning_precedes_valuesr[r_insert_from_selectrcte_follows_insertrGinsert_single_values_expr_post_values_clauser=)r insert_stmtrnrr crud_paramscrud_params_singlerrrrr select_textrpost_values_clausers @rr visit_insertzSQLCompiler.visit_insert sQz> #&55 #)     - +t}  02   L8 L6  "!\./   , -<; &137<3DE "-Q  !, ="&,"F    +D+[268 D **;+<==   L 22; KKMAz   %<  GdiiJJJJ7IJJJ D > $[3 $#44T^E{/E   - /...#    )&$,t'?FF2FFKy ,X ,$,*I ,4#:#:#<#<#> >D K1J.  * 6!-/""35"" " 1000  +D$B + C** *D 9 4 4$,*I 4**,,t3D r  :# #KrtcdS)z3Provide a hook for MySQL to add LIMIT to the UPDATENrn)r update_stmts rrupdate_limit_clausezSQLCompiler.update_limit_clause strtc ,d|d<|j|fddi|S)z|Provide a hook to override the initial table clause in an UPDATE statement. MySQL overrides this. Trnrr)rr from_table extra_fromsrs rrupdate_tables_clausez SQLCompiler.update_tables_clause s-8 ,z,TEE$E"EEErtc td)z~Provide a hook to override the generation of an UPDATE..FROM clause. MySQL and MSSQL override this. zCThis backend does not support multiple-table criteria within UPDATErrrrr from_hintsrs rrupdate_from_clausezSQLCompiler.update_from_clause s" %   rtc j }|j}t|}|rJtt j|jfd|D}|}n g}|jh}j|||dd} |j r| j ||j fi|z } j ||j|fi|} tj |tjfi|} |jr|| \} } nd} | | z } | dz } |oj| dfd| Dz } js|jr/jr(| d|jp|jzz } |r j||j|| fi|} | r| d| zz } |jj|jfi|}|r| d|zz } |}|r| d|zz } js|jr/js(| d|jp|jzz } jr|r| z} jd |rd | zd zS| S) Ncg|]}|v| Srnrn)rpr main_fromss rrr z,SQLCompiler.visit_update..- s*"""!:*=*=*=*=*=rtrzUPDATE z SET rc3jK|]-}|ddz|dzV.dS)r)r=rNr)rprrrs rrrNz+SQLCompiler.visit_update..X sd   aD # #D # F F d       rtr WHERE r(rjrk)r _extra_fromsboolr]r rrarfr=rrrrrISUPDATEr~r'render_table_with_column_in_update_fromrBr%r$rrrrrrrrGr=)rrrnrrr is_multitablerender_extra_fromsr9rrrrextra_from_textrrFrrs` @@rr visit_updatezSQLCompiler.visit_update$ sz>!. [))  2Z5k6GHHIIJ""""&""" )..{;;OO!# *01O #2 /)         +D+[268 D/T. *,>  BD  - +t}  02     !(,(>(>Z)) %M::!M    JdJ        !        > [3 - d33!I;3I  .5d5!"   O .o--  # / [5<<< k4=GGBGGG!. &,-33K@@ #2 /)         +D+[268 D -- *K     !(,(>(>Z)) %M::!M   ! - d33!7  .;d;!   O .o--  # /; (;DGGBGGA & A %  ! $*H  C$//[3 D 9 4 4**,,t3D r  :# #Krtc<d|j|zS)Nz SAVEPOINT %srformat_savepointrsavepoint_stmts rrvisit_savepointzSQLCompiler.visit_savepoint s > >~ N NNNrtc<d|j|zS)NzROLLBACK TO SAVEPOINT %srrs rrvisit_rollback_to_savepointz'SQLCompiler.visit_rollback_to_savepoint s&)DM,J,J - -   rtc<d|j|zS)NzRELEASE SAVEPOINT %srrs rrvisit_release_savepointz#SQLCompiler.visit_release_savepoint s&% (F(F ) )   rt)NF)NNTF)NFFN)NT)NFTr)FTr)FFF)FFNN)FFFNNTF)FTNrFNF)FFFNT)rrrr EXTRACT_MAPrCOMPOUND_KEYWORDSr>r#r!r"rr%rrrrurr<rrr1r2rrr.r3rmemoized_instancemethodr9 contextlibcontextmanagerrAr&memoized_propertyrSrWrrr dependenciesrerhror|rrrrrrrrrrrrrrrrrrrr rrrr!r.r3r0r,rJrQrWr\r_rerhrmrorrrbr}rrrrrwrUrVrrrrrrrrrrrrrrrrrrrrrrrr rrr#rr+r%r0r4rPr_r frozensetrrgr{rr|rrrGrrrBrCrrrFrrrrrrrrrrrrr r r rnrtrrr r s  K)%**H*x( KI !&/4+ %*!O % N !%)+*Oo!#" ////b   =A&O&O&O&OPAAAIII     (>B@  $&KKK      .   8          @ @ @ @D888   CCC=>1111f--->BBBBBB      <<<<<<   >CMMMM6888            05*GGGGGG IIIAAA DDD AAA DDD AAA DDD                      $" ; ; ; ; z@@@&   &$$$6; 6 6 6 6" zAzAzAzA~ EEEEB>>>    (((EEE" %ZJZJZJZJx $$$[[[z    .4- YY[[ )NIIKK+HI8 %NNNN` ! ! !:444l    666   :      ) ) )nnnn`FFF    ddddL GGG   MMMHHHHTOOO        rtr cHeZdZdZdZdZdZdZdZdZ dZ d Z d Z d S) StrSQLCompileraA :class:`.SQLCompiler` subclass which allows a small selection of non-standard SQL features to render into a string value. The :class:`.StrSQLCompiler` is invoked whenever a Core expression element is directly stringified without calling upon the :meth:`_expression.ClauseElement.compile` method. It can render a limited set of non-standard SQL constructs to assist in basic stringification, however for more substantial custom or dialect-specific SQL constructs, it will be necessary to make use of :meth:`_expression.ClauseElement.compile` directly. .. seealso:: :ref:`faq_sql_expression_string` cdS)Nzrnrs rrrz$StrSQLCompiler._fallback_column_name srtc V|j|jfi|d|j|jfi|dS)N[])rrDrZrds rrvisit_getitem_binaryz#StrSQLCompiler.visit_getitem_binary sJ DL + + + + + + DL , , , , , ,  rtc |j||fi|Srrrds rrvisit_json_getitem_op_binaryz+StrSQLCompiler.visit_json_getitem_op_binary (t(@@R@@@rtc |j||fi|Srr rds rr!visit_json_path_getitem_op_binaryz0StrSQLCompiler.visit_json_path_getitem_op_binary r"rtc <d|j|zS)Nz)rformat_sequence)rseqrs rrr0zStrSQLCompiler.visit_sequence s*T]-J-J3-O-OOOrtctfdtj|D}dd|zS)Nc Bg|]}d|ddiSrrlrprrs rrr z3StrSQLCompiler.returning_clause.. s?     % %dAtUB ? ?   rtz RETURNING r)r_select_iterablesrB)rrrcolumnss` rrrzStrSQLCompiler.returning_clause sO    /??    dii0000rtc Tddfd|DzS)Nrrc3:K|]}|jfddVdSTrNrrprrrrs rrrNz4StrSQLCompiler.update_from_clause..* sS# #  !A  Odj O OB O O# # # # # # rtr2rs` ``rrrz!StrSQLCompiler.update_from_clause' sT# # # # # #  # # #     rtc Tddfd|DzS)Nrc3:K|]}|jfddVdSr/rr0s rrrNz:StrSQLCompiler.delete_extra_from_clause..2 sS   !A  Odj O OB O O      rtr2rs` ``rrrz'StrSQLCompiler.delete_extra_from_clause/ sTdii              rtc d|zS)Nz[%s]rnr.s rrr%z!StrSQLCompiler.get_from_hint_text7 s }rtN) rrrrrrr!r$r0rrrr%rnrtrrrr s&      AAAAAAPPP111      rtrc.eZdZejdZejdZd)dZdZdZ dZ dZ d*d Z d)d Z d Zd ZdZ d+dZdZd*dZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z!d!Z"d"Z#d#Z$d$Z%d%Z&d&Z'd'Z(d(Z)dS), DDLCompilercP|j|jd|jS)N)r)rstatement_compilerrrs rrrzDDLCompiler.sql_compiler< s-|.. L$T5N/   rtc|jjSr)rrrs rrrzDDLCompiler.type_compilerB s |))rtNcdSrrnrs rrrzDDLCompiler.construct_paramsF r,rtc |j}t|jtjr|}|j}||j}t|dkr |dd}}n|d|d}}| d|| d|| d| |j|j |j |zS)Nrrrr(rarfullname)contextrtargetrTabler}rformat_table_seqrV setdefaultrrrr)rddlrr<rpathraschs rr visit_ddlzDDLCompiler.visit_ddlI s+ cj&, / / NllnnG}H,,SZ88D4yyA~~!!Wbs!"XtAws   w . . .   x - - -   z8+@+@+L+L M M M 223=73JKKKrtcJ|j|j}d|zS)NzCREATE SCHEMA )r format_schemar)rr"rs rrvisit_create_schemazDDLCompiler.visit_create_schema\ s$,,V^<<&((rtcf|j|j}d|z}|jr|dz }|S)Nz DROP SCHEMA  CASCADE)rrFrcascade)rdroprrs rrvisit_drop_schemazDDLCompiler.visit_drop_schema` s<,,T\::& <  J D rtc |j}|j}d}|jr |d|jdzz }|d||zdzz }||}|r||dzz }|dz }d}d}|jD]}|j} ||| jo| } | ||z }d}|d | zz }| jrd }D#tj $r_} tj tj tj d |j| j| jd fz| Yd} ~ d} ~ wwxYw|||j} | r ||d z| zz }|d||zz }|S)Nz CREATE rzTABLE rjrFfirst_pkr Tz (in table '%s', column '%s'): %sr)r) _include_foreign_key_constraintsz )%s )rrrrBrcreate_table_suffixr,r primary_keyr rrr,u descriptionrargscreate_table_constraintsinclude_foreign_key_constraintspost_create_table) rr"rarrrR separatorrO create_columnr processedceconsts rrvisit_create_tablezDDLCompiler.visit_create_tableg s= ? 4 CHHU_--3 3D 800777#=="66u==  . '#- -D   #^  M"*F  LL!F,>,Ox<) (I%D &ID9,,D%$#H#    $ABB ,fk271:FG  -- -3-S.    - I$u, ,D d44U;;;; s9C  D7AD22D7Fc|j}|jrdS||}dfd|jD}|r|d|zz }|S)NrNrc3BK|]}|VdSr)rrpr!rs rrrNz2DDLCompiler.visit_create_column.. s@  )3DLL $ $      rt)rsystemget_column_specificationrB constraints)rr"rOr rr^s` rrvisit_create_columnzDDLCompiler.visit_create_column s = 4,,Vh,GG    7=7I       C%K D rtcLg}jr|jj}|||nt |fdjDddfd|DDS)Nc.g|]}|ju |v|Srn)rS)rpr omit_fkcsras rrr z8DDLCompiler.create_table_constraints.. s;   E---!92D2D2D2D2Drtz, c3K|]}||V dSrrn)rpps rrrNz7DDLCompiler.create_table_constraints.. s4  } }}}  rtc3K|]R}|j|jjrt|dd;|VSdS)N use_alterF) _create_rulersupports_alterrrrbs rrrNz7DDLCompiler.create_table_constraints.. s  +3!..t444 3 4 #:{EBB 4 Z((4333  rt)rSr=foreign_key_constraintsrer]extend_sorted_constraintsrB)rrarQreall_fkcsris`` @rrrWz$DDLCompiler.create_table_constraints s    2   u0 1 1 10 + 7 ++,LMMIII     2      }}      "-         rtcFd|j|jzS)Nz DROP TABLE rrrrrKs rrvisit_drop_tablezDDLCompiler.visit_drop_table s!;!;DL!I!IIIrtcFd|j|jzS)Nz DROP VIEW rurvs rrvisit_drop_viewzDDLCompiler.visit_drop_view s : :4< H HHHrtcL|jtjd|jzdS)Nz,Index '%s' is not associated with any table.)rar rrrrs rr_verify_index_tablezDDLCompiler._verify_index_table s1 ; "AEJN   rtTc d|j}|j}d}|jr|dz }|jt jd|d||d||j |dd fd |j Dd z }|S) NzCREATE zUNIQUE z0CREATE INDEX requires that the index have a namezINDEX include_schemarr (rc3RK|]!}j|ddV"dS)FTrrtN)rr)rprrs rrrNz1DDLCompiler.visit_create_index.. sX!))T*rtrk) rr|rrgrr r_prepared_index_namerrarB expressions)rr"rinclude_table_schemarrrs` rrvisit_create_indexzDDLCompiler.visit_create_index s   '''= <  I D : "B    % %eN % K K K K  ! ! (< "     II"-        rtcz|j}|jtjdd||dzS)Nz.DROP INDEX requires that the index have a namez DROP INDEX Tr~)rrr rr)rrKrs rrvisit_drop_indexzDDLCompiler.visit_drop_index sT  : "@ !:!: $";" "   rtc|j |j|j}nd}|r|r|j|}nd}|j|}|r|dz|z}|SNr)rarrr format_index)rrrr schema_name index_names rrrz DDLCompiler._prepared_index_name s ; "#}>>u{KK  #   . -445EFFKKK]//66  8$s*Z7Jrtcd|j|jjd||jS)N ALTER TABLE z ADD )rrrrarrr"s rrvisit_add_constraintz DDLCompiler.visit_add_constraint s@ M & &v~'; < < < < LL ( ( (  rtcd|j|jd|j|jjt jS)NzCOMMENT ON TABLE r)rrrrrcommentr Stringrs rrvisit_set_table_commentz#DDLCompiler.visit_set_table_comment sV M & &v~ 6 6 6 6   2 2&(9(9     rtcFd|j|jzS)NzCOMMENT ON TABLE %s IS NULLrurvs rrvisit_drop_table_commentz$DDLCompiler.visit_drop_table_comment! s(,t}/I/I L0 0   rtcd|j|jddd|j|jjt jS)NzCOMMENT ON COLUMN T) use_tablerr)rrrrrrr rrs rrvisit_set_column_commentz$DDLCompiler.visit_set_column_comment& sj M ' '$4 (       2 2&(9(9      rtcJd|j|jdzS)NzCOMMENT ON COLUMN %s IS NULLT)r)rrrrvs rrvisit_drop_column_commentz%DDLCompiler.visit_drop_column_comment0 s0- 0K0K LD1L1 1   rtcd|j|jz}|jj|d|jjzz }|jj|d|jjzz }|jj|d|jjzz }|jj|d|jjzz }|jj|dz }|jj|dz }|jj |d|jj zz }|jj d ur|d z }|jj |d z }|S) NzCREATE SEQUENCE %sz INCREMENT BY %dz START WITH %dz MINVALUE %dz MAXVALUE %dz NO MINVALUEz NO MAXVALUEz CACHE %dTz ORDERz CYCLE) rr&r incrementstartminvaluemaxvalue nominvalue nomaxvaluecacherTcycle)rr"rs rrvisit_create_sequencez!DDLCompiler.visit_create_sequence5 s"#dm&C&C N' '   > # / &)AA AD >  + $v~';; ;D > " . NV^%<< " . NV^%<< $ 0 N "D > $ 0 N "D >  + K&."66 6D > 4 ' ' H D >  + H D rtcFd|j|jzS)NzDROP SEQUENCE %s)rr&rrvs rrvisit_drop_sequencezDDLCompiler.visit_drop_sequenceM s!DM$A$A$,$O$OOOrtc|j}|j|j|}nd}|t jd|jzd|j|jjd||jrdpdS)Nz99 t088  e4 9     44Z@@@ rtcd}|j$|j|}||d|zz }|d|j|jddzz }|||z }|Srrrs rrvisit_column_check_constraintz)DDLCompiler.visit_column_check_constraint rrtc:t|dkrdSd}|j$j|}||d|zz }|dz }|ddfd|jr|jn|jDzz }||z }|S)Nrrrz PRIMARY KEY rrc3VK|]#}j|jV$dSrrrrr*s rrrNz;DDLCompiler.visit_primary_key_constraint.. sI# #  M   ' '# # # # # # rt) rVrrrrB_implicit_generatedcolumns_autoinc_firstr,rrs` rrvisit_primary_key_constraintz(DDLCompiler.visit_primary_key_constraint s z??a  2 ? &!]<99  # # # # 1( 00' # # #      44Z@@@ rtc  |jd}|j$|j|}||d|zz }t|jdjj}|ddfd|jDd|||ddfd |jDd z }|| |z }|| |z }|| |z }|S) Nrrrz FOREIGN KEY(rc3VK|]#}|jjV$dSr)rparentrrprrs rrrNz;DDLCompiler.visit_foreign_key_constraint.. D23qx}--rtz ) REFERENCES rc3VK|]#}|jjV$dSr)rr rrs rrrNz;DDLCompiler.visit_foreign_key_constraint.. rrtrk) rrrr0rr rarBdefine_constraint_remote_tabledefine_constraint_matchdefine_constraint_cascadesr)rr!rr remote_tablers @rrvisit_foreign_key_constraintz(DDLCompiler.visit_foreign_key_constraint sm= ? &!]<99J/003:@   II7A7J      / /L(     II7A7J       ,,Z888 // ;;; 44Z@@@ rtc,||S)z=Format the remote table clause of a CREATE CONSTRAINT clause.)r)rr!rars rrrz*DDLCompiler.define_constraint_remote_table s$$U+++rtc t|dkrdSd}|j$j|}||d|zz }|ddfd|Dzz }||z }|S)Nrrrz UNIQUE (%s)rc3VK|]#}j|jV$dSrrr*s rrrNz6DDLCompiler.visit_unique_constraint.. s5FFadm))!&11FFFFFFrt)rVrrrrBrrs` rrvisit_unique_constraintz#DDLCompiler.visit_unique_constraint s z??a  2 ? &!]<99 IIFFFF:FFF F F   44Z@@@ rtcd}|j+|d|j|jtzz }|j+|d|j|jt zz }|S)Nrz ON DELETE %sz ON UPDATE %s)ondeletervalidate_sql_phrase FK_ON_DELETEonupdate FK_ON_UPDATErr!rs rrrz&DDLCompiler.define_constraint_cascades s|   * Odm&G&G#\'' D   * Odm&G&G#\'' D rtcd}|j|jr|dz }n|dz }|j+|d|j|jtzz }|S)Nrz DEFERRABLEz NOT DEFERRABLEz INITIALLY %s)r*r<rr FK_INITIALLYrs rrrz+DDLCompiler.define_constraint_deferrability so  ,$ * %))   + Odm&G&G$l'' D rtc2d}|j |d|jzz }|S)Nrz MATCH %s)matchrs rrrz#DDLCompiler.define_constraint_match s'   ' K*"22 2D rtcd|j|jddz}|jdur|dz }n|jdur|dz }|S)NzGENERATED ALWAYS AS (%s)FTrz STOREDz VIRTUAL)rrr& persisted)r generatedrs rrvisit_computed_columnz!DDLCompiler.visit_computed_column sj)D,=,E,E  U$-F- -    $ & & I DD  E ) ) J D rtrr)FT)*rrrrrrrrrDrGrLr_rfrWrwryr|rrrrrrrrrrrrdrRrYrrrrrrrrrrrrnrtrrr5r5; s     ***LLL&)))000d     7;' ' ' ' RJJJIIIBF6                    0PPP   $&         (0,,,          rtr5c eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+S),GenericTypeCompilerc dS)NFLOATrnrs rr visit_FLOATzGenericTypeCompiler.visit_FLOAT wrtc dS)NREALrnrs rr visit_REALzGenericTypeCompiler.visit_REAL rrtc ^|jdS|j dd|jizSd|j|jdzS)NNUMERICzNUMERIC(%(precision)s) precisionz!NUMERIC(%(precision)s, %(scale)s)rscalerrs rr visit_NUMERICz!GenericTypeCompiler.visit_NUMERIC J ? "9 [ +{EO.LL L6"_:: rtc ^|jdS|j dd|jizSd|j|jdzS)NDECIMALzDECIMAL(%(precision)s)rz!DECIMAL(%(precision)s, %(scale)s)rrrs rr visit_DECIMALz!GenericTypeCompiler.visit_DECIMAL rrtc dS)NINTEGERrnrs rr visit_INTEGERz!GenericTypeCompiler.visit_INTEGER& yrtc dS)NSMALLINTrnrs rrvisit_SMALLINTz"GenericTypeCompiler.visit_SMALLINT) zrtc dS)NBIGINTrnrs rr visit_BIGINTz GenericTypeCompiler.visit_BIGINT, sxrtc dS)N TIMESTAMPrnrs rrvisit_TIMESTAMPz#GenericTypeCompiler.visit_TIMESTAMP/ s{rtc dS)NDATETIMErnrs rrvisit_DATETIMEz"GenericTypeCompiler.visit_DATETIME2 rrtc dS)NDATErnrs rr visit_DATEzGenericTypeCompiler.visit_DATE5 rrtc dS)NTIMErnrs rr visit_TIMEzGenericTypeCompiler.visit_TIME8 rrtc dS)NCLOBrnrs rr visit_CLOBzGenericTypeCompiler.visit_CLOB; rrtc dS)NNCLOBrnrs rr visit_NCLOBzGenericTypeCompiler.visit_NCLOB> rrtcZ|}|jr |d|jzz }|jr |d|jzz }|S)N(%d)z COLLATE "%s")lengthr)rrrrs rr_render_string_typez'GenericTypeCompiler._render_string_typeA sB < * FU\) )D ? 6 Oeo5 5D rtc .||dS)NCHARrrs rr visit_CHARzGenericTypeCompiler.visit_CHARJ ''v666rtc .||dS)NNCHARr!rs rr visit_NCHARzGenericTypeCompiler.visit_NCHARM s''w777rtc .||dS)NVARCHARr!rs rr visit_VARCHARz!GenericTypeCompiler.visit_VARCHARP s''y999rtc .||dS)NNVARCHARr!rs rrvisit_NVARCHARz"GenericTypeCompiler.visit_NVARCHARS s''z:::rtc .||dS)NTEXTr!rs rr visit_TEXTzGenericTypeCompiler.visit_TEXTV r#rtc dS)NBLOBrnrs rr visit_BLOBzGenericTypeCompiler.visit_BLOBY rrtc .d|jr d|jzpdzS)NBINARYrrrrs rr visit_BINARYz GenericTypeCompiler.visit_BINARY\ s 5<AFU\,AGRHHrtc .d|jr d|jzpdzS)N VARBINARYrrr5rs rrvisit_VARBINARYz#GenericTypeCompiler.visit_VARBINARY_ s elDv /DJKKrtc dS)NBOOLEANrnrs rr visit_BOOLEANz!GenericTypeCompiler.visit_BOOLEANb rrtc |j|fi|Sr)r2rs rrvisit_large_binaryz&GenericTypeCompiler.visit_large_binarye tu+++++rtc |j|fi|Sr)r<rs rr visit_booleanz!GenericTypeCompiler.visit_booleanh !t!%..2...rtc |j|fi|Sr)rrs rr visit_timezGenericTypeCompiler.visit_timek r?rtc |j|fi|Sr)rrs rrvisit_datetimez"GenericTypeCompiler.visit_datetimen "t"5//B///rtc |j|fi|Sr)rrs rr visit_datezGenericTypeCompiler.visit_dateq r?rtc |j|fi|Sr)rrs rrvisit_big_integerz%GenericTypeCompiler.visit_big_integert s t --"---rtc |j|fi|Sr)rrs rrvisit_small_integerz'GenericTypeCompiler.visit_small_integerw rGrtc |j|fi|Sr)rrs rr visit_integerz!GenericTypeCompiler.visit_integerz rBrtc |j|fi|Sr)rrs rr visit_realzGenericTypeCompiler.visit_real} r?rtc |j|fi|Sr)rrs rr visit_floatzGenericTypeCompiler.visit_float st,,,,,rtc |j|fi|Sr)rrs rr visit_numericz!GenericTypeCompiler.visit_numeric rBrtc |j|fi|Srr)rs rr visit_stringz GenericTypeCompiler.visit_string rBrtc |j|fi|SrrWrs rr visit_unicodez!GenericTypeCompiler.visit_unicode rBrtc |j|fi|Srr/rs rr visit_textzGenericTypeCompiler.visit_text r?rtc |j|fi|Srr\rs rrvisit_unicode_textz&GenericTypeCompiler.visit_unicode_text r?rtc |j|fi|SrrWrs rr visit_enumzGenericTypeCompiler.visit_enum rBrtc 0tjd|z)NzKCan't generate DDL for %r; did you forget to specify a type on this Column?rrs rrrzGenericTypeCompiler.visit_null s$ #%* +   rtc N|j||jfi|Sr)r type_enginerrs rrvisit_type_decoratorz(GenericTypeCompiler.visit_type_decorator s,t|E--dl;;BBrBBBrtc |jdi|S)Nrn) get_col_specrs rrvisit_user_definedz&GenericTypeCompiler.visit_user_defined s!u!''B'''rtN)-rrrrrrrrrrr rrrrrrr"r&r)r,r/r2r6r9r<r>rArDrFrIrKrMrOrQrSrUrXrZr]r_rarrerhrnrtrrrr s      777888:::;;;777IIILLL,,,///,,,000,,,...000///,,,---/////////,,,,,,///   CCC(((((rtrceZdZdZdZdS)StrSQLTypeCompilercX|dr|jSt|)NrL) startswith_visit_unknownAttributeError)rrs rr __getattr__zStrSQLTypeCompiler.__getattr__ s- >>( # # && & %% %rtc d|jjzS)Nz%s)r)rrs rrrmz!StrSQLTypeCompiler._visit_unknown seo...rtN)rrrrormrnrtrrrjrj s2&&& /////rtrjc4eZdZdZeZeZeZ e j dZ ddZ dZdZd Zd Zd Zd Zd ZddZddZdZd dZddZddZddZejddZdZd!dZ dZ! d"dZ"d dZ#ej$dZ%dZ&dS)#IdentifierPreparerz@Handle quoting and case-folding of identifiers based on options.N"TFc||_||_|p|j|_||_|jdz|_||_||_i|_|jjdv|_ 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 )rzrxN) r initial_quote final_quote escape_quoteescape_to_quote omit_schemaquote_case_sensitive_collations_stringsrr)rrrurvrwrzrys rrrzIdentifierPreparer.__init__ so. *&<$*<(#014&/N, $ 7< ! rtc|j|j}|j|jt j||_|Sr)r)__new____dict__rr_schema_getterr)rrpreps rrrz)IdentifierPreparer._with_schema_translate sJ~%%dn55 T]+++!'!67K!L!L rtc||j|j}|jr|dd}|S)zEscape an identifier. Subclasses should override this to provide database-dependent escaping behavior. rr)rrwrxrrr s rr_escape_identifierz%IdentifierPreparer._escape_identifier s@ d/1EFF   -MM#t,,E rtcB||j|jS)zCanonicalize an escaped identifier. Subclasses should override this to provide database-dependent unescaping behavior that reverses _escape_identifier. )rrxrwrs rr_unescape_identifierz'IdentifierPreparer._unescape_identifier s}}T143DEEErtct|5||s tjd|d|jd|S)zkeyword sequence filter. a filter for elements that are intended to represent keyword sequences, such as "INITIALLY", "INITIALLY DEFERRED", etc. no special characters should be present. .. versionadded:: 1.3 NzUnexpected SQL phrase: z (matching against rk)rr rpattern)rrregs rrrz&IdentifierPreparer.validate_sql_phrase sN  syy'9'9 ""77CKKK) rtcL|j||z|jzS)z~Quote an identifier. Subclasses should override this to provide database-dependent quoting behavior. )rurrvrs rrquote_identifierz#IdentifierPreparer.quote_identifier s0  %%e,, -  rtc|}||jvpA|d|jvp2|jt j| p||kS)z5Return True if the given identifier requires quoting.r)r'reserved_wordsillegal_initial_characterslegal_charactersrr text_type)rr lc_values rrrz#IdentifierPreparer._requires_quotessh;;== + + #Qx4:: #(..t~e/D/DEEE #E!  rtc\|jtj| S)zjReturn True if the given identifier requires quoting, but not taking case convention into account.)rrrrrs rrr$z1IdentifierPreparer._requires_quotes_illegal_chars"s((..t~e/D/DEEEErtcX|tjd||S)aConditionally quote a schema name. The name is quoted if it is a reserved word, contains quote-necessary characters, or is an instance of :class:`.quoted_name` which includes ``quote`` set to ``True``. Subclasses can override this to provide database-dependent quoting behavior for schema names. :param schema: string schema name :param force: unused .. deprecated:: 0.9 The :paramref:`.IdentifierPreparer.quote_schema.force` parameter is deprecated and will be removed in a future release. This flag has no effect on the behavior of the :meth:`.IdentifierPreparer.quote` method; please refer to :class:`.quoted_name`. NzThe IdentifierPreparer.quote_schema.force parameter is deprecated and will be removed in a future release. This flag has no effect on the behavior of the IdentifierPreparer.quote method; please refer to quoted_name().)rwarn_deprecatedr)rrforces rrrzIdentifierPreparer.quote_schema's:.    !   zz&!!!rtcF|tjdt|dd}|`||jvr |j|S||r|||j|<n ||j|<|j|S|r||S|S)aConditionally quote an identfier. The identifier is quoted if it is a reserved word, contains quote-necessary characters, or is an instance of :class:`.quoted_name` which includes ``quote`` set to ``True``. Subclasses can override this to provide database-dependent quoting behavior for identifier names. :param ident: string identifier :param force: unused .. deprecated:: 0.9 The :paramref:`.IdentifierPreparer.quote.force` parameter is deprecated and will be removed in a future release. This flag has no effect on the behavior of the :meth:`.IdentifierPreparer.quote` method; please refer to :class:`.quoted_name`. NzThe IdentifierPreparer.quote.force parameter is deprecated and will be removed in a future release. This flag has no effect on the behavior of the IdentifierPreparer.quote method; please refer to quoted_name().r)rrrr{rr)rrrs rrrzIdentifierPreparer.quoteLs,    !   w-- = %%}U++((//1+/+@+@+G+GDM%((+0DM%(}U++  ((// /Lrtc>|jr||S|Sr)rzr)rcollation_names rrrz#IdentifierPreparer.format_collation~s%  / "::n-- -! !rtc||j}||}|js|r|||dz|z}|Sr)rrrryr)rr1rrrs rrr&z"IdentifierPreparer.format_sequenceskzz(-((11(;;  D D!,$$%566'    ' ' 1))%00E rtzsqlalchemy.sql.namingc|jtjur |||j}|dSn|j}t |tjr}|jdkr|jj p |jj }n|jj p |jj }t||kr-|d|dz dztj|ddz}n|j|||S)Nrrr)rr _NONE_NAME_constraint_name_for_tablerarrrrmax_index_name_lengthrmax_constraint_name_lengthrVrmd5_hexvalidate_identifierr)rnamingr!rmax_s rrrz$IdentifierPreparer.format_constraints ?h1 1 144J,D|t?D dH5 6 6 3(G33L6:|9 L;:|94yy4AqL)C/$,t2D2DRSS2II L , ,T 2 2 2zz$rtc,||Sr)rr{s rrrzIdentifierPreparer.format_indexs%%e,,,rtc||j}||}||}|js|r|r||dz|z}|S)z'Prepare a quoted table and schema name.Nr)rrrryr)rrarrrfrs rrrzIdentifierPreparer.format_tablesu <:DD!!11%88 HJ H3C H&&'7883>GF rtc,||S)zPrepare a quoted schema name.)rrs rrrFz IdentifierPreparer.format_schemaszz$rtc||j}t|ddsM|r6||j||dz||zS||S|r#||j||dz|zS|S)zPrepare a quoted column name.NrF)rrr)rrrrar)rr rr table_namers rrrz IdentifierPreparer.format_columns <;Dv|U33  (%% *&jj&& 'zz$'''  %% *&  rtc||}|js0|r.|r,||||dfS||dfS)z(Format table name and schema as a tuple.Fr)rryrr)rrarrs rrr?z#IdentifierPreparer.format_table_seqs 11%88 AJ A3C A!!"233!!%E!::  %%e%>>@ @rtcd|j|j||jfD\}}}tjd|||dz}|S)Nc6g|]}tj|Srn)rJrrs rrr z5IdentifierPreparer._r_identifiers..s0) ) )  IaLL) ) ) rtzM(?:(?:%(initial)s((?:%(escaped)s|[^%(final)s])+)%(final)s|([^\.]+))(?=\.|$))+)initialfinalescaped)rurvrrJr)rrr escaped_finalrs rr_r_identifiersz!IdentifierPreparer._r_identifiers s) ) " ''(899) ) ) %  J $"EmLL M   rtchj}fdd||DDS)z:Unpack 'schema.table.column'-like strings into components.c:g|]}|Srn)r)rpr<rs rrr z;IdentifierPreparer.unformat_identifiers..#s7     % %a ( (   rtcg|] \}}|p| Srnrn)rpabs rrr z;IdentifierPreparer.unformat_identifiers..%s @@@Aaf1@@@rt)rfindall)r identifiersrs` rrunformat_identifiersz'IdentifierPreparer.unformat_identifierssR      @@;)?)?@@@    rt)rsNrsTFr)T)TN)FNNF)'rrrrRESERVED_WORDSrLEGAL_CHARACTERSrILLEGAL_INITIAL_CHARACTERSrrrrrrrrrrrr$rrrr&rrrrrrrrrFrr?rrrrnrtrrrrrr s"JJ#N'!;--d33 (," " " " H   FFF$       FFF #"#"#"#"J0000d"""    ........T.//  0/ @---         $$$$LAAAA" "     rtrr)lrrrHrJrrrrrrr r r r rr]rrIrLEGAL_CHARACTERS_PLUS_SPACErangerfrrrrUNICODErrrand_or_addmulrKdivmodtruedivnegltlenegtgeeqis_distinct_fromisnot_distinct_from concat_oprc notmatch_opin_opnotin_opcomma_oprris_isnotrexists distinct_opinvany_opall_opdesc_opasc_op nullsfirst_op nullslast_oprrr$r&r'r(rGrHrrr\rhcuberollup grouping_setsr(rrr UNION_ALLr EXCEPT_ALLr INTERSECT_ALLrobjectrwith_metaclassEnsureKWArgTyper VisitablerrRrr rr5rrjrrrnrtrrrs$$ ___aaF2:.55(bj):BDAA;;eeArll;;;AA3%HHrzi?) @;A) BM6C) DfE) FfG) JwK) ) Lf ^ MQ) )  X  N N !4 N  . h y N NF NF h _  $       ""$( &#W'$h(,'+_ J=J=J=J=J=vJ=J=J=Z 4 4 4 4 4&4&t';VDD 4 4 4H&0d$w$ w$ w$ w$ w$ (w$ w$ w$ tI?????[???DKKKKK(KKK\W(W(W(W(W(,W(W(W(t/////,///x x x x x x x x x x rt