L iRUdZddlmZddlZddlmZddlZddlm Z ddl Z ddl Z ddl Z ddl Z ddlmZddlZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddl&m'Z'ddl&m(Z(ddl&m)Z)ddl&m*Z*dd l&m+Z+dd!l&m,Z,dd"l&m-Z-dd#l&m.Z.dd$l&m/Z/dd%l&m0Z0dd&l&m1Z2dd'l3m4Z4dd(l3m5Z5dd)l'm6Z6dd*l'm7Z7dd+l'm8Z8dd,l'm9Z9dd-l'm:Z:dd.l*m;Z;dd/l0mZ>d1d2l&m?Z?d1d&l&m1Z1d1d3l1m@Z@d1d4lAmBZBd1d5lAmCZCd1d6lAmDZDd1d7lAmEZEejHr>dd8lFmGZGdd9l'mHZHdd:l'mIZIdd;l'mJZJddlOmPZPdd?lOmQZQdd@lOmRZRddAlOmSZSddBlOmTZTddCl*mUZUddDl*mVZVddEl*mWZWddFl*mXZXddGl*mYZYddHl*mZZZddIl*m[Z[ddJl*m\Z\ddKl*m]Z]ddLl*m^Z^ddMl+m_Z_ddNl.m`Z`ddOl.maZaddPl.mbZbddQl.mcZcddRl.mdZdddSl.meZeddTl.mfZfddUl/mgZgddVl/mhZhddWl/miZiddXl/mjZjddYl/mkZkddZl/mlZldd[l/mmZmdd\l/mnZndd]l/moZodd^lpmqZqdd_lpmrZrdd`lpmsZsddalpmtZtddbl=muZud1dclvmwZwd1ddlxmyZyd1delxmzZzd1dflxm{Z{d1dglxm|Z|d1dhlxm}Z}d1dilxm~Z~d1djlxmZd1dklxmZd1dllxmZedmefZhdnZe j doe j Ze j dpe j ZeddqDchc] }e| c}jdrgZe j dse j Ze j dse j Ze j dte j Ze j due jZe j dve jZdwZedxdydzd{d|d}Zie,j(d~e,j*de,j,de,j.de,j0de,j2de,j4de,j6de,j8de,j:de,j<de,j>de,j@de,jBde,jDde,jFde,jHdie,jJde,jLde,jNde,jPde,jRde,jTde,jVde,jXde,jZde,j\de,j^de,j`de,jbde,jdde,jfde,jhde,jjde,jlde,jnde,jpde,jrde,jtde,jvde,jxdiZe+j|de+j~de+jde+jde+jde+jde+jde+jde+jde+jde+jde+jde+jde+jdiZded<ddddddddddddddddƜZe/jjde/jjde/jjde/jjde/jjde/jjdiZGd̈́deZGdτdeCZdZded<dZded<d1Zded<dZded<GdڄdeEZGd܄dedެ߫ZGddeZGddeZGddeZGdde@ZGdde ZGdde Zee\ZZZZGddejdddgZGddZGdde1jZGdde-jee*jZGdde-jee*jZGddeZGddeZGddeZGddeZGddeZGddeCZGddeCZGddZycc}w(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`. ) annotationsN)IntEnum) perf_counter)Any)Callable)cast)ClassVar)Dict) FrozenSet)Iterable)Iterator)List)Mapping)MutableMapping) NamedTuple)NoReturn)Optional)Pattern)Sequence)Set)Tuple)Type) TYPE_CHECKING)Union)base) coercions)crud)elements) functions) operators)roles)schema) selectable)sqltypes)util)is_column_element)is_dml) _de_clone) _from_objects) _NONE_NAME) _SentinelDefaultCharacterization)NO_ARG) quoted_name) TupleType)prefix_anon_map)exc) FastIntFlag)Literal)Protocol)Self) TypedDict)_AnnotationDict)_AmbiguousTableNameMap) CompileState) Executable)CacheKey)ExecutableDDLElement)Insert)Update) UpdateBase)UpdateDMLState) ValuesBase)_truncated_label)BinaryExpression) BindParameter) ClauseElement) ColumnClause) ColumnElement)False_)Label)Null)True_)Function)Column) Constraint)ForeignKeyConstraint)Index)PrimaryKeyConstraint)Table)UniqueConstraint)_ColumnsClauseElement)AliasedReturnsRows)CompoundSelectState)CTE) FromClause)NamedFromClause) ReturnsRows)Select) SelectState)_BindProcessorType) TypeDecorator) TypeEngine)UserDefinedType) Visitable)CursorResultMetaData)_CoreSingleExecuteParams)_DBAPIAnyExecuteParams)_DBAPIMultiExecuteParams)_DBAPISingleExecuteParams)_ExecuteOptions)_GenericSetInputSizesType)_MutableCoreSingleExecuteParams)Dialect)SchemaTranslateMapTyperY>^asdoinisonortoallandanyascendfornewnotoffoldsetbothcaserdescelsefromfullintojoinleftlikenullonlysomethentrueuserwhenarraycheckcrossfalsegrantgroupilikeinnerlimitorderouterrighttableunionusingwherebinarycolumncreateexceptfreezehavingisnulloffsetselectuniqueanalyseanalyzebetweencollatedefaultforeignleadingnaturalnotnullplacingprimarysimilarverbosedistinctoverlapstrailing initially intersect localtime symmetric asymmetric constraint deferrable references current_date current_role current_time current_user session_user authorizationlocaltimestampcurrent_timestampz ^[A-Z0-9_$]+$z^[A-Z0-9_ $]+$ $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 LASTz ^ z | z & ~z << z >> coalesce CURRENT_DATE CURRENT_TIMECURRENT_TIMESTAMP CURRENT_USER LOCALTIMELOCALTIMESTAMPrandomsysdate SESSION_USERUSERCUBEROLLUPz GROUPING SETSzDict[Type[Function[Any]], str] FUNCTIONSmonthdayyearsecondhourdoyminutequarterdowweekepoch milliseconds microseconds timezone_hourtimezone_minute)rrrrrrrrrrrrrrrUNIONz UNION ALLEXCEPTz EXCEPT ALL INTERSECTz INTERSECT ALLc@eZdZUdZded< ded< ded< ded<y ) ResultColumnsEntryaTracks a column expression that is expected to be represented in the result rows for this statement. This normally refers to the columns clause of a SELECT statement but may also refer to a RETURNING clause, as well as for dialect-specific emulations. strkeynamenameTuple[Any, ...]objectsTypeEngine[Any]typeN__name__ __module__ __qualname____doc____annotations__]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/sql/compiler.pyrrks1L; I%  r rc(eZdZ ddZy)_ResultMapAppendercyNr selfrrrtype_s r __call__z_ResultMapAppender.__call__s r N) rrrrrz Sequence[Any]rrreturnNonerrrrr r r rrs7     r rz Literal[0]RM_RENDERED_NAMEz Literal[1]RM_NAMEz Literal[2] RM_OBJECTSz Literal[3]RM_TYPEc,eZdZUded<ded<ded<y)_BaseCompilerStackEntryzSet[FromClause] asfrom_fromscorrelate_fromsr[r$Nrrrr r r r rrs!!$$r rc@eZdZUded<ded<ded<ded<ded <y ) _CompilerStackEntryr: compile_stateboolneed_result_map_for_nestedneed_result_map_for_compoundr[select_0 Select[Any]insert_from_selectNr"r r r r$r$s  $$"&&##r r$F)totalcreZdZUdZded< ded< ded< ded < d ed < edd Zedd Zy) ExpandedStatearepresents state to use when producing "expanded" and "post compile" bound parameters for a statement. "expanded" parameters are parameters that are generated at statement execution time to suit a number of parameters passed, the most prominent example being the individual elements inside of an IN expression. "post compile" parameters are parameters where the SQL literal value will be rendered into the SQL statement at execution time, rather than being passed as separate parameters to the driver. To create an :class:`.ExpandedState` instance, use the :meth:`.SQLCompiler.construct_expanded_state` method on any :class:`.SQLCompiler` instance. r statementrd parameters%Mapping[str, _BindProcessorType[Any]] processorsOptional[Sequence[str]] positiontupzMapping[str, List[str]]parameter_expansioncjtjdtfdjDS)zrTuple of positional parameters, for statements that were compiled using a positional paramstyle. z.statement does not use a positional paramstylec3<K|]}j|ywrr0).0keyrs r  z6ExpandedState.positional_parameters..sFcT__S)Fs)r4r2InvalidRequestErrortuplers`r positional_parametersz#ExpandedState.positional_parameterss@    #))@ FT5E5EFFFr c|jS)z.synonym for :attr:`.ExpandedState.parameters`.r8r>s r additional_parametersz#ExpandedState.additional_parameterssr N)rr)rrd)rrrr r propertyr?rAr r r r.r.si"N=((65+((10 G Gr r.ceZdZUdZded< ded< ded< ded < d Zded < d Zded < d Zded< dZded< d Z ded< d Z ded< d Z ded<y )_InsertManyValuesarepresents state to use for executing an "insertmanyvalues" statement. The primary consumers of this object are the :meth:`.SQLCompiler._deliver_insertmanyvalues_batches` and :meth:`.DefaultDialect._deliver_insertmanyvalues_batches` methods. .. versionadded:: 2.0 r&is_default_exprrsingle_values_exprList[crud._CrudParamElementStr]insert_crud_paramsintnum_positional_params_countedFsort_by_parameter_orderincludes_upsert_behaviorsNOptional[Sequence[Column[Any]]]sentinel_columnsrnum_sentinel_columnsr3sentinel_param_keysimplicit_sentinelembed_values_counter) rrrr r rKrLrNrOrPrQrRr r r rDrDs 87M#&& %*T)',t+9=5<!"#!4807 $t# "'$& r rDcveZdZUdZded<ded<ded<ded <d ed <d ed <d ed<d ed<ded<ded<y)_InsertManyValuesBatchasrepresents an individual batch SQL statement for insertmanyvalues. This is passed through the :meth:`.SQLCompiler._deliver_insertmanyvalues_batches` and :meth:`.DefaultDialect._deliver_insertmanyvalues_batches` methods out to the :class:`.Connection` within the :meth:`.Connection._exec_insertmany_context` method. .. versionadded:: 2.0.10 rreplaced_statementrereplaced_parameters#Optional[_GenericSetInputSizesType]processed_setinputsizesz#Sequence[_DBAPISingleExecuteParams]batchzSequence[Tuple[Any, ...]]sentinel_valuesrIcurrent_batch_sizebatchnum total_batchesr& rows_sorted is_downgradedNrr r r rTrT^sD //@@ ....Mr rTcBeZdZdZdZdZdZdZeezezZeezZ dZ dZ y) InsertmanyvaluesSentinelOptszcbitflag enum indicating styles of PK defaults which can work as implicit sentinel columns rr1@N) rrrr  NOT_SUPPORTED AUTOINCREMENTIDENTITYSEQUENCEANY_AUTOINCREMENT_SUPPORTED_OR_NOTUSE_INSERT_FROM_SELECTRENDER_SELECT_COL_CASTSr r r rarawsE MMHH%08;%(99 r raceZdZdZ dZ dZy) CompilerStaterrr1N)rrr COMPILINGSTRING_APPLIED NO_STATEMENTr r r roros I=N Lr roc,eZdZdZdZ dZ dZ eezZy)Lintingzrepresent preferences for the 'SQL linting' feature. this feature currently includes support for flagging cartesian products in SQL statements. rrr1N)rrrr  NO_LINTINGCOLLECT_CARTESIAN_PRODUCTS WARN_LINTING FROM_LINTINGr r r rtrts5J!"L2- .s"NDTdjj&6"67N") fromsr~edgesremovepop collectionsdequepopleftdiscard extendleftdifference_update) rstartrrthe_rest start_withstackr to_removers @r lintzFromLinter.lints DJJu:  J OOJ '!J!!:,/==?D   T " +0@$44<@I@   NIN N  # #I . Z' 'As  C Ccj\}}|rX|}|rSd}djfd|D}|j||j|}t j |yyy)Nz{stmt_type} statement has a cartesian product between FROM element(s) {froms} and FROM element "{start}". Apply join condition(s) between each element to resolve.rc3DK|]}dj|dyw)"N)r)r9from_rs r r;z"FromLinter.warn..s)&16a 5)*!,& ) stmt_typerr)rrrrr&warn)rrrrrtemplate froms_strmessages` r rzFromLinter.warns#yy{* E7 !II&:?& #//'#**Z0*  '"! r r)SELECT)rrrr rrr r r rzrzs#J#r rzrrceZdZUdZdZded< dZded< ded < d Zd ZdZ d ed <dZ d ed<dZ ded<e jZded< ded<e jZded<dZded< dZded< dZded< ded< dd e j&f d(dZd)fd Zed Zd!Zd"Zed*d#Zd+d$Zd,d%Z d- d.d&Zed'ZxZ S)/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. NOptional[ClauseElement]r/rstringrostateFzOptional[CursorResultMetaData]_cached_metadataz"Optional[List[ResultColumnsEntry]]_result_columns Optional[SchemaTranslateMapType]schema_translate_maprhexecution_optionsIdentifierPreparerpreparerr8 _annotationszOptional[CompileState]r%dml_compile_stateOptional[CacheKey] cache_keyfloat _gen_timec||_|jj|_|r'||_|jj ||_|t j |_||_|j|_ |j|_ |jr)trt|tsJ|j|_|j"|jfi||_|r/|J|jj'|j$||_t j(|_nt j*|_t-|_y)aConstruct a new :class:`.Compiled` object. :param dialect: :class:`.Dialect` to compile against. :param statement: :class:`_expression.ClauseElement` to be compiled. :param schema_translate_map: dictionary of schema names to be translated when forming the resultant SQL .. seealso:: :ref:`schema_translating` :param compile_kwargs: additional kwargs that will be passed to the initial call to :meth:`.Compiled.process`. N)dialectidentifier_preparerrr_with_schema_translaterorprr/supports_execution can_executerr isinstancer;_execution_optionsrprocessr_render_schema_translatesrqrrrrrrr/rrender_schema_translatecompile_kwargss r __init__zCompiled.__init__Ks4  88 ( >r c Btj|t||rr2UnsupportedCompilationErrorrrelementerrkws r visit_unsupported_compilationz&Compiled.visit_unsupported_compilations--dDMBKr ct)zReturn a Compiled that is capable of processing SQL expressions. If this compiler is one, it would likely just return 'self'. NotImplementedErrorr>s r  sql_compilerzCompiled.sql_compilers "##r c (|j|fi|Sr_compiler_dispatch)robjkwargss r rzCompiled.processs%s%%d5f55r cT|jtjur |jSy)z3Return the string text of the generated SQL or DDL.r)rrorqrr>s r __str__zCompiled.__str__s# ::55 5;; r ct)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. rrparamsextracted_parameters escape_namess r construct_paramszCompiled.construct_paramss "##r c"|jS)z0Return the bind params for this compiled object.rr>s r rzCompiled.paramss$$&&r ) rrkr/rrrrr&rMapping[str, Any])rrr SQLCompiler)rrbrrrrrrNNTr"Optional[_CoreSingleExecuteParams]r&Optional[Sequence[BindParameter[Any]]]rr&rz)Optional[_MutableCoreSingleExecuteParams])!rrrr r/r ris_sqlis_ddlrrrr& EMPTY_DICTrrr%rr immutabledictrr classmethodrrrrBrrrrr __classcell__rs@r rrs *.I&-FC4 - F F7;4;:>O7>=A:A)-8 ! $(OOL/3,0M)0 15-4 %)I!( BF(-,>D,>,>,@ 7(7(+7(? 7( "& 7( * 7(r+  ?L$$66:GK! $2 $E $ $ 3 $''r rc<eZdZdZdZddZddZ d dZy) TypeCompilerz2Produces DDL specification for TypeEngine objects.z visit_\w+c||_yr)r)rrs r rzTypeCompiler.__init__s  r c |jrE|jj|jvr#|j|jj}|j|fi|Sr)_variant_mappingrrrrrrs r rzTypeCompiler.processsU  " " !!U%;%;;**4<<+<+<=E'u''333r c 0tj|||r)r2rrs r rz*TypeCompiler.visit_unsupported_compilations--dG<#Er N)rrk)rrrrrr)rrr Exceptionrrrr)rrrr  ensure_kwargrrrr r r rrs><L4FF!*F25F Fr rcFeZdZdZdZdZd dZedZedZ dZ y) _CompileLabelz;lightweight label object which acts as an expression.Label.labelrr _alt_namesc6||_||_|f|z|_yrr)rcolr alt_namess r rz_CompileLabel.__init__s  &9,r c.|jjSrr proxy_setr>s r r z_CompileLabel.proxy_set||%%%r c.|jjSrrrr>s r rz_CompileLabel.type||   r c |Srr rrs r  self_groupz_CompileLabel.self_group r N)r ) rrrr __visit_name__ __slots__rrBr rrr r r rrsDFN/I- &&!!r rcJeZdZdZdZdZdZedZedZ dZ dZ y ) ilike_case_insensitiveaproduce a wrapping element for a case-insensitive portion of an ILIKE construct. The construct usually renders the ``lower()`` function, but on PostgreSQL will pass silently with the assumption that "ILIKE" is being used. .. versionadded:: 2.0 ilike_case_insensitive_operandr comparatorc4||_|j|_yrr)rrs r rzilike_case_insensitive.__init__s !,,r c.|jjSrrr>s r r z ilike_case_insensitive.proxy_set r r c.|jjSrr r>s r rzilike_case_insensitive.type r r c |Srr rs r rz!ilike_case_insensitive.self_grouprr cJt|jj|Sr)rr_with_binary_element_type)rrs r rz0ilike_case_insensitive._with_binary_element_types!% LL 2 25 9  r N) rrrr rrrrBr rrrr r r rrsJ 6N'I-&&!! r rc eZdZUdZeZejdddddddddZde d < d e d <de d <d Z e Z dZ de d<dZde d<dZde d< de d< dZde d< dZde d< dZde d< dZde d<de d< de d < d!e d"< dZde d#< dZde d$< dZde d%< d&e d'< d&e d(< d&e d)< d*e d+< dZde d,< dZde d-< d Zde d.< dZde d/< dZde d0< dZde d1< dZd2e d3< dZd4e d5< dZd6e d7<dZ d8e d9<dZ!d:e d;<e"Z#d< ejJZ&d?e d@< dZ' dZ( dZ)dAe dB< dZ*d6e dC< dZ+d6e dD<dZ,d6e dE<dZ-de dF<dGe dH<dIe dJ<dKe dL<de dM<e.j^dNZ0e.j^dOZ1e.j^e1jddPe0jdZ3e4dQZ5e4dRZ6ddde7df ddTZ8e9ddUZ:ejvddVZe9dYZ?ejddZZAejd d[ZCeDjd\ZFd]ZGd^ZHej d d_ZId`ZJe9d daZK d d dbZL d ddcZMejddZNe9deZO d ddfZPejdgdhZRdie dj<ejddkZSejejdldmZTejejdldnZUddoZVdpZWddqZXdrZY ddsZZ ddtZ[ dduZ\dvZ]dwZ^ d ddxZ_dyZ`dzZad{Zbd|Zcd}Zdd~ZeddZf ddZgddZhddZiddZjdZkdZldZmdZndZodZpdZqdZrdZsdZtdZudZvdZwdZx d ddZydZzdZ{ddZ| ddZ}dZ~dZ ddZdZdZdZdZdZdZdZdZ ddZdZ d dZdZdZdZdZdZ d d!dZdZdZejdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d"dZ d"d„Z d"dÄZ d#dĄZdńZedfdƄZ d$dDŽZdȄZ d%dɄZd&dʄZ d' d(d˄Zd̄Zdddddejldf d)d̈́Zd΄ZdτZ d*dЄZdфZd҄ZddӄZdԄZ d+dՄZdքZdׄZ d,d؄Z ddلZ d-dڄZdۄZd܄Z d.d݄ZdބZd߄Zde d<eʐjs"ejde"fde"fgZ ddZdZdSe d< d/dZ d0dZdZdZdZ ddZdZՐd1dZdZdZdZ d2dZdZ d3dZ d4dZݐddZdZejejejejejejejejejejejiZejejejiZ d5dZ d6dZ d7dZdZdZdZdZ d d8dZdZdZddZdZdZdZy(9rz~Default implementation of :class:`.Compiled`. Compiles :class:`_expression.ClauseElement` objects into SQL strings. PAZC_)%():.[] zClassVar[Mapping[str, str]]bindname_escape_characterszClassVar[Pattern[str]]_bind_translate_re_bind_translate_charsTFr&isdeleteisinsertisupdatezOptional[List[Column[Any]]] postfetchr zSequence[Column[Any]]insert_prefetchupdate_prefetchN&Optional[Sequence[ColumnElement[Any]]]implicit_returning isplaintextzDict[str, BindParameter[Any]]bindszDict[BindParameter[Any], str] bind_nameszList[_CompilerStackEntry]rreturning_precedes_values'render_table_with_column_in_update_fromansi_bind_rulesr bindtemplatecompilation_bindtemplate_numeric_binds_identifier_charzList[ResultColumnsEntry]r_textual_ordered_columns_ad_hoc_textual_ordered_columns_loose_column_name_matching_numeric_binds_render_postcompilezOptional[ExpandedState]_post_compile_expanded_state Optional[str]_pre_expanded_stringOptional[List[str]]_pre_expanded_positiontupzOptional[_InsertManyValues]_insertmanyvaluesz!Optional[crud._CrudParamSequence]_insert_crud_paramszFrozenSet[BindParameter[Any]]literal_execute_paramspost_compile_paramszutil.immutabledict[str, str]escaped_bind_nameszbOptional[Tuple[Dict[BindParameter[Any], List[BindParameter[Any]]], Dict[str, BindParameter[Any]]]]_cache_key_bind_matchr4_values_bindparam_visited_bindparaminlinez"Optional[MutableMapping[CTE, str]]cteszDict[Tuple[int, str], CTE]ctes_by_level_namez/Dict[CTE, Tuple[int, str, selectable._CTEOpts]]level_name_by_ctectes_recursivez"__\[POSTCOMPILE_(\S+?)(~~.+?~~)?\]z%\(([^)]+?)\)s|c$|jyr)_init_bind_translaters r rzSQLCompiler._init_compiler_clsCs   "r ctjdj|j}tjd|d|_|j|_y)Nrr*r+)reescaperr-compiler.r/)rregs r r[z SQLCompiler._init_bind_translateGsFii > >?@!#auAJ!7$'$B$B!r rc >||_||_|r:|dD cic]} | j| } } |dD cic]} | | g} } | | f|_||_||_i|_tj|_ g|_ g|_ |j|_ |jrH|jjdx|_} | r|jdk(rdnd|_t"|_nt&|j|_d|_|j*xs |j,|_t/|_i|_i|_t7j8|||fi||j:s|j<s |j>rt@rtC|tDsJ|j:s |j<rmt@rtC|tFsJ|jHrd|_%nA|jr5|j:r"|jLjNr|jPrd|_%t&|j|_)|rK|jTjW|jTjYD cic] \} }| dvr| |c}} |jZt\j^urm|jr-|jr|jan|jc|jdr'|jgd d }|ji|d yyycc} wcc} wcc}} w) 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 for_executemany: whether INSERT / UPDATE statements should expect that they are to be invoked in an "executemany" style, which may impact how the statement will be expected to return the values of defaults and autoincrement / sequences and similar. Depending on the backend and driver in use, support for retrieving these values may be disabled which means SQL expressions may be rendered inline, RETURNING may not be rendered, etc. :param kwargs: additional keyword arguments to be consumed by the superclass. rrrrr(NT>rrr positionalr>rEr?Fr_no_postcompile)_populate_self)5 column_keysrr:rQfor_executemanylintingr9r& column_dictr:rrrb paramstyle startswithrEr@_pyformat_templater?BIND_TEMPLATESrU label_lengthmax_identifier_lengthr0anon_maptruncated_names_truncated_countersrrr1r2r0rrr@rB_inlinerTrinsert_executemany_returning_return_defaultsr>__dict__updateitemsrrorq_process_numeric_process_positionalrFr#_process_parameters_for_postcompile)rrr/rrfrgrh_supporting_againstrbcksmckbmnbkvr0s r rzSQLCompiler.__init__Ms@'" &/l3AEE1H3D3$-aL1qAsF1D1*.D & /  **, !",, ??'.'9'9'D'DY'O OD ""--1AACs3-?D ),:7;M;M,ND )   AG$A$A  () <>35 $=f= ==DMMT]]!)Z888}}  %i<<<$$"&DK))  AA%66#'DK*7+=+=>  MM !4 < < B B D 1 qD  " ::55 5&&))+,,.''!22!&$(3 88t9 ( 6y41V sL L,L cH|jy|jjS)aWhen an INSERT is compiled with a single set of parameters inside a VALUES expression, the string is assigned here, where it can be used for insert batching schemes to rewrite the VALUES expression. .. versionadded:: 1.3.8 .. versionchanged:: 2.0 This collection is no longer used by SQLAlchemy's built-in dialects, in favor of the currently internal ``_insertmanyvalues`` collection that is used only by :class:`.SQLCompiler`. N)rLrFr>s r insert_single_values_exprz%SQLCompiler.insert_single_values_exprs%  ! ! )))<< >,B==$Q' sA*c|jS)zVbackwards compatibility; returns the effective_returning collection. )rr>s r  returningzSQLCompiler.returning s '''r cb |jddS#t$r}td|d}~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 entryN)r IndexError)ries r current_executablezSQLCompiler.current_executables;< M::b>,/ / MCD" L Ms . ).cXt|jt|jzSr)listr4r5r>s r prefetchzSQLCompiler.prefetch6s#D(()D1E1E,FFFr ciSrr r>s r _global_attributeszSQLCompiler._global_attributes:s r cftj}||_i|_i|_d|_|S)zInitialize collections related to CTEs only if a CTE is located, to save on the overhead of these collections otherwise. F)r& OrderedDictrUrVrWrX)rrUs r _init_cte_statezSQLCompiler._init_cte_state>s:*.)9)9); #%"$# r c#hK|j|j}}gdc|_|_ |jr|jd}d|d<nd}|j|jf|r|jd||c|_|_y#r|jd||c|_|_wxYww)z;special API to support the use case of 'nested result sets'FrTr'N)rrCrr)rresult_columnsordered_columnsentrys r _nested_resultzSQLCompiler._nested_resultVs   ! !(79%3d3 zz 26:23&&(=(== = 67 8D $"7 67 8D $"7s(B2=B (#B2 $B//B2c  |jrJ|jtjusJ|jrJ|j j dk(rdn|j j dk(sJdg d  fd }tj|j||j|_ |jrv|jjDcic]\}}|| }}}t|jt|k(sJ Dcgc]}|j||c}|_n |_|jrg tj|j||jj }|jj"Dcgc]3}|d|dtj|j||d|d f5}}|jj%|| |_yycc}}wcc}wcc}w) Nr%srrc|jd}|rj|Sj|jd|jdS)Nrr1r)rappend)m normal_bind placeholder positionss r  find_positionz6SQLCompiler._process_positional..find_position{sM''!*K  -""  ,wwqz!r rrr1rrFrH)rz re.Match[str]rr)r4rrorqrErrjr]sub_positional_patternrrPrxlengetrLrFrH_replace) rrrrreverse_escaperrFrHrrs @@r rzzSQLCompiler._process_positionalns####zz]99999&&&& << " "h .K<<**g5 55K  "ff  $ $mT[[    " "/3/F/F/L/L/NOtq!adONOt../3~3FF FF;D 37""4. D  )D   ! !I!#((&&99" //BB" aDaDFF433]AaDIaD " "&*%;%;%D%D#5#5&E&D "% "P "s G1G78G<ct jsJjtjusJd}i jr\j Pt jfdjjDjj}njj}|D]R}| vrj|}|jvs|jvrd |<9j|}|dz }| |<T|_t _j"rYt% } j'Dcic]"\}}j"j)|||$c}} t% |k(sJj*j- fdj._jrljj0 z} jj2D cgc]} | d| dd| df} } jj5| | _yycc}}wcc} w)Nrc3>K|]}|jvr|ywr)rR)r9rrs r r;z/SQLCompiler._process_numeric..s'4#9#99c,|jdSNrrr param_poss r z.SQLCompiler._process_numeric..si +r rrrr)rErrorqrLrR itertoolschainr:valuesr9rOrNr@next_numeric_posrr4rPrrxr_pyformat_patternrrrFrHr) rnumr bind_namebindph len_beforerposrFrrHrs ` @r ryzSQLCompiler._process_numericsL""""zz]99999$&  ! !d&<&<&HOO $ 6 6 8 &&( EOO**,E *II%::i(D0004666(, )$;;Z/ //,,00 +T[[    ! !&&99 //BB"1qtT1Q4(" " &*%;%;%D%D#5#5 &E&D " "$"s 'H/3H5cffdjDDcic] \}}||| c}}Scc}}w)Nc 3K|]}j||jjs%|jjjn5t fdt t|jjDfyw)c3TK|]}|jj!ywr)_cached_bind_processorr)r9 elem_typers r r;z9SQLCompiler._bind_processors...s(# )&<.sxOOI. )~~<<"==dllK"#-1 )9>>.#e # sB B )r:)rr:values` r _bind_processorszSQLCompiler._bind_processorssC"& U  # J   s-c2t|jdkDSr)rrr>s r  is_subqueryzSQLCompiler.is_subquerys4::""r c|Srr r>s r rzSQLCompiler.sql_compilers r cL|j||d}|j|S)aRReturn a new :class:`.ExpandedState` for a given parameter set. For queries that use "expanding" or other late-rendered parameters, this method will provide for both the finalized SQL string as well as the parameters that would be used for a particular parameter set. .. versionadded:: 2.0.0rc1 Trc)rr{)rrrr0s r construct_expanded_statez$SQLCompiler.construct_expanded_states:** % + 77   r c|jrF|sD|jJ|st|jjSt j d|xrt |j}|rq|jt jd|jd}|j} | J| \} } t||D cic]\} } | | D]}|| }} } }nd}|ri}|jjD]\}}|r|jj||n|}|j|vr||j||<G||vr ||||<T|rX|j rL|r&t j d|j|fzdt j d|jzd|r|j||}n|}|j"r|j$||<|j&||<|Si}|jjD]\}}|r|jj||n|}|rX|j rL|r&t j d|j|fzdt j d|jzd|r|j||}n|}|j"r|j$||<|j&||<|Scc}} } w) z5return a dictionary of bind parameter keys and valuesNzcan't construct new parameters when render_postcompile is used; the statement is hard-linked to the original parameters. Use construct_expanded_state to generate a new statement and parameters.zcThis compiled object has no original cache key; can't pass extracted_parameters to construct_paramsrz@A value is required for bind parameter %r, in parameter group %dcd3x)codez)A value is required for bind parameter %r)rFrGdictr0r2r<r&rPr CompileErrorrQzipr:rxrr:requiredcallableeffective_valuer)rrrr _group_number_checkrdhas_escaped_namesorig_extracted ckbm_tuplerr$r} extractedrresolved_extractedpdrr escaped_name value_params r rzSQLCompiler.construct_params-sT  # #O44@ @@D==HHII--4)JT$2I2I-J ~~%&&J "&!233J) )) GD!%(8L$M"" Ay G"i"" " "&  B#'??#8#8#:% = 4)++//d; ==F*'-imm'.lookup_typesH009HHOF""*fM.I"*f .E r ) rinclude_set_input_sizesexclude_set_input_sizesrrNr:rrrr/r) rr inputsizesrNrrrrrrs @@@@r _get_set_input_sizes_lookupz'SQLCompiler._get_set_input_sizes_lookups,,77 77    !%!DD) $) 9% )4INN(C 9% D)sC c&|jdS)zReturn the bind param dictionary embedded into this compiled object, for those values that are present. .. seealso:: :ref:`faq_sql_expression_string` - includes a usage example for debugging use cases. F)rrr>s r rzSQLCompiler.paramss$$E$22r ci}|j}| |j}|jrg}|j}||j}ndx}}|j }t d|t d|i}ii} d} |jr||} |jrg} n|jj} |j} | D]| r| jn} |j}||jvr*| vr%|j||j| | <a||j vr| vr| | }d}n3|j}|j#| ||}|\}}|| | <|| <|j$r|j'||j(j*r*|J|j'fdt-|dDn|j'fd|D| | j/d|Dn||j/d |D|Dcgc]\}}| c}}|<w|{|j1fd }t3j4|j6||}| l|Jt-| |j8Dcic]\}}||j:|c}}|j<j5fd |}|j/| t?|||||}|rR||_||_|j@|_|jrtC|jxsd nd|_||_"|Scc}}wcc}}w) ahandle special post compile parameters. These include: * "expanding" parameters -typically IN tuples that are rendered on a per-parameter basis for an otherwise fixed SQL statement string. * literal_binds compiled with the literal_execute flag. Used for things like SQL Server "TOP N" where the driver does not accommodate N as a bound parameter. Nr1z/Mapping[str, Sequence[_BindProcessorType[Any]]]render_literal_valuec3K|]?\}}t|dD]+\}}vr"|dz d|d||dz f-Ayw)rNr$) enumerate)r9i tuple_elementjr$rtuple_processorss r r;zBSQLCompiler._process_parameters_for_postcompile..Ns{ . !1=(1-(C . !%1#'77 0 6q1u = I /3Aq 9 0 6q1u = . .sAArc3:K|]\}}vr |fywrr )r9r:r$rsingle_processorss r r;zBSQLCompiler._process_parameters_for_postcompile..Ys1. &Q#'88!"3D"9:.c3&K|] \}}| ywrr r9rr$s r r;zBSQLCompiler._process_parameters_for_postcompile.._s3%,T1D3c3&K|] \}}| ywrr rs r r;zBSQLCompiler._process_parameters_for_postcompile..fs.Mat.Mrc|jd}|}|jdrU|jdjd}|d|dcdjfd|jdD}|S)Nrr1~~rrc3.K|] }|ywrr )r9expbe_leftbe_rights r r;z]SQLCompiler._process_parameters_for_postcompile..process_expanding..vs !!(h7!s)rsplitr)rr:exprtokrrreplacement_expressionss @@r process_expandingzJSQLCompiler._process_parameters_for_postcompile..process_expandingms~''!*C*3/Dwwqzggaj&&t,$'FCF!yy!#zz$/!Kr c,|jdSrrrs r rzASQLCompiler._process_parameters_for_postcompile..s)AGGAJ/r r )#rIrrbrKr4rrrEr:rrPrr9rNrender_literal_bindparamrrO$_literal_execute_expanding_parameterliteral_executerwrrrextendrr]r_post_compile_patternrr@rr.r/rrG)rr0reexpanded_parameterspre_expanded_stringnew_positiontuppre_expanded_positiontupr2new_processorsto_update_setsnumeric_positiontupnamesebnr parameter to_updaterleep_resreplacement_expr expand_keyr$r r/rr:expanded_staterrr rrs @@@@@r r{z/SQLCompiler._process_parameters_for_postcompiles$!#77  &"&++  ?? O'+'E'E $'/+/+;+;(:> =O6**  3Z  =z >@24)+48 ??7C#;E""&(#OO**,E%%I -D253774.4L 4(ID777'>>55%1; 1M6,L9 D444#:: .| fa4H . '--.*3. +6+223093)4(...M9.MM8A1'4z1 1'-!,&&t,SI -V FF  & &(9;N   *". ..!*')>)>!C;;._autoinc_getters)",..i"HK". +* )(r cjfdDSfdDS)agiven cursor.lastrowid value and the parameters used for INSERT, return a "row" that represents the primary key, either by using the "lastrowid" or by extracting values from the parameters that were sent along with the INSERT. c34K|]\}}|ywrr )r9r+rr0s r r;zWSQLCompiler._inserted_primary_key_from_lastrowid_getter..get..sL[VSfZ0Lc3VK|] \}}|ur  n n|"ywrr )r9r+r autoinc_colautoinc_getterr0r0s r r;zWSQLCompiler._inserted_primary_key_from_lastrowid_getter..get..sJ $+- .9+9jA!*$J/ 0 &)r )r0r0r8r9getterslastrowid_processorrow_fns``r rzDSQLCompiler._inserted_primary_key_from_lastrowid_getter..getsH#./ :  LGLLL (/   r )r&r# engine_resultr,r%r/rrr>r primary_keyoperator methodcaller_autoincrement_columnr_cached_result_processorrr9 result_tupler:)rresultparam_key_getterr/rrr3rr8r9r2r;r<r=s @@@@@@r +_inserted_primary_key_from_lastrowid_getterz7SQLCompiler._inserted_primary_key_from_lastrowid_gettersB--==!!---&&00 i0 00((  " "5*:3*? F L  11  ""-"2"2"K"K d# +;7Kdjj( )"1#' $$9J9J%K#cgg%KL  4 G N&Ls &EEc  tjj}|jJ|jj}t rt |tsJ|j}|j}|j}|Jt|Dcic]\}}|| }}}td|jDcgc]?}||vrtj||dfntj d||ddfAc} |j#|jDcgc]}|j$c} fd} | Scc}}wcc}wcc}w)Nz'List[Tuple[Callable[[Any], Any], bool]]TrFc,fdDS)Nc3HK|]\}}|r|n|ywrr )r9r+use_rowr0rows r r;zWSQLCompiler._inserted_primary_key_from_returning_getter..get..0 s-#FG 's F:,>>rr )rLr0r;r=s``r rzDSQLCompiler._inserted_primary_key_from_returning_getter..get/ s'. r )r&r#r>r%r/rrr>r,rr7rrr?r@ itemgetterrArDr:) rrEr/rFrridxrretrr;r=s @@r +_inserted_primary_key_from_returning_getterz7SQLCompiler._inserted_primary_key_from_returning_getter sO--!!---&&00 i0 00==++ $$$(1)(<=HCsCx== 5!,, cz((S2D9!--!#3C#8$   "$$9J9J%K#cgg%KL   7> &Ls D93AD? Ecy)zCalled when a SELECT statement has no froms, and no FROM clause is to be appended. Gives Oracle Database a chance to tack on a ``FROM DUAL`` to the string output. rr r>s r  default_fromzSQLCompiler.default_from7 sr c |jj|fi|}|jD]C}||jvr|j|}|j |j|j dd}|j |}|x|j|<|j|<||j |<|j j|d||jvr|xj|hzc_||jvr|xj|hzc_ |j}|s|\} } |jD]4}|j | vs| |j } | | j|6F|S)aSQL compile the nested element of an _OverrideBinds with bindparams swapped out. The _OverrideBinds is not normally expected to be compiled; it is meant to be used when an already cached statement is to be used, the compilation was already performed, and only the bound params should be swapped in at execution time. However, there are test cases that exericise this object, and additionally the ORM subquery loader is known to feed in expressions which include this construct into new queries (discovered in #11173), so it has to do the right thing at compile time as well. TF) maintain_keyrN) rr translater9 _with_valuer:r:rrOrNrQ _cloned_setr) roverride_bindsrsqltextrbpnew_bprrrr~cbs r visit_override_bindsz SQLCompiler.visit_override_bindsA sj"<.((;;DGBG ))" 0A "AB^^((0!$F ??2&D/5 5DJJqMDJJt,&*DOOF # OO  D )T---((VH4(T000++x7+33J' d..0Bvv~!"&&\R/0?" 0Hr c Hd|jj|fi|zdzSNr&r'rr)rgroupingasfromrs r visit_groupingzSQLCompiler.visit_grouping +8X%%88HHH3NNr c Hd|jj|fi|zdzSr_r`)rrars r visit_select_statement_groupingz+SQLCompiler.visit_select_statement_grouping rdr c |jr|jjr td|jdd}|j\}}}|r|} n|} |jj} | E| j| vr7| j| | jr|jj|d<|j|jfd|i|S#t$r}t j d|d}~wwxYw)N'Union[SelectState, CompoundSelectState]rr%ECan't resolve label reference for ORDER BY / GROUP BY / DISTINCT etc.render_label_as_labelwithin_columns_clause) rrsupports_simple_order_by_labelrKeyErrorr2r_label_resolve_dictr_order_by_label_elementrshares_lineager) rrrkrr%ke with_cols only_froms only_cols resolve_dict order_by_elems r visit_label_referencez!SQLCompiler.visit_label_reference s ::$,,EE  $=JJrN?3! 11  $) ( $OOCCM)!&&,6!00 !3!34 OO;;./t|| OO "7   A &&/ sC C7C22C7c >|js|j|jS td|jdd}j\}}} |r||j} n||j} | |d<|j| fd|i|S#t$r;}t j |jdtj|Yd}~d}~wwxYw#t$r;} t j |jdtj| Yd} ~ yd} ~ wwxYw)Nrhrr%ri)extraexc_clsrrjrk) rr _text_clauserrmr_no_text_coercionrr2rrn) rrrkrr%rqrrrsrtrrs r visit_textual_label_referencez)SQLCompiler.visit_textual_label_reference s*zz<< 4 45 5  9 2/M,9+L+L( :y $ 10/2F* +4<<+@DJ ;   ' '/((   "   ' '/((   s/B!C C1CC D!1DDc H|xr| }||u} | s|rMt|jtjr|j d|j} n |j} |r|1| |j|| f|j z|z|j |jj|fddd|ttjz|jj| zS| r|jj| S|jj|fddi|S)NcolidentT)rkwithin_label_clauserkF)rrrrC_truncated_identifierrrrr OPERATORSr!as_r format_label) rradd_to_result_maprrkrjresult_map_targetsrrender_label_with_asrender_label_only labelnames r  visit_labelzSQLCompiler.visit_label s? " =*=&= 2U:  4%**h&?&?@ 66z5::N !JJ  ,!JJI&)9)99? ==--eY? ?35==33,157 r c,tjd)Nz:Cannot compile Column object until its 'name' is assigned.r2rrrs r _fallback_column_namez!SQLCompiler._fallback_column_name s H  r c @|j}|j|fi|Sr) _resolvedr)rrr sql_elements r visit_lambda_elementz SQLCompiler.visit_lambda_element s#'' t||K.2..r c Z|jx}}||j|}|j} | s,t|tj r|j d|}|C|||jf|z} |jr| |jfz } |||| |j| r|j|}n|jj|}|j} | |r | js|S|jj| } | r|jj!| dz} nd} t"rt| t$sJ| j}| s |r ||vr||}t|tj r|j d|}| |jj|zdz|zS)Nrr)ralias)rr is_literalrrrCrr: _tq_labelrescape_literal_columnrquoternamed_with_columnschema_for_object quote_schemarrZ)rrr include_tablerambiguous_table_name_maprr orig_namertargetsreffective_schema schema_prefix tablenames r  visit_columnzSQLCompiler.visit_column s";;&y <--f5D&& jx/H/HI--j$?D  (tVZZ03EEGF,,.. dIw D --d3D==&&t,D  = U5L5LK#}}>>uE MM../?@3F!# !%999 I%,!994Y? )X%>%>? 66w J  4==#6#6y#AACG$N Nr c L|jj|jSr)rformat_collation collationrrrs r visit_collationzSQLCompiler.visit_collationX s}}--g.?.?@@r c |jSrr)r fromclausers r visit_fromclausezSQLCompiler.visit_fromclause[ s r c |jSrr)rr~rs r  visit_indexzSQLCompiler.visit_index^ s zzr c ||d<|j|d<|jjj|jfi|S)Ntype_expressionr)rrtype_compiler_instancerr)r typeclausers r visit_typeclausezSQLCompiler.visit_typeclausea sJ * $(MM !:t||22:: OO !  r cV|jjr|jdd}|SNr%%%r_double_percentsreplacertexts r post_process_textzSQLCompiler.post_process_texth $ == ) )<<T*D r cV|jjr|jdd}|Srrrs r rz!SQLCompiler.escape_literal_columnm rr c fd}jsd_|r|ddftjtj dt j |jjS)Nc|jd}|jvr jj|fiSj|fiSr)r _bindparamsrbindparam_string)rrrr textclauses r  do_bindparamz2SQLCompiler.visit_textclause..do_bindparams sW771:Dz---#t||J$:$:4$@GBGG,t,,T8R88r Tc$|jdSrr)rs r rz.SQLCompiler.visit_textclause.. saggajr ) rr8r%NULLTYPEBIND_PARAMS_ESCr BIND_PARAMSrr)rrrrrs`` ` r visit_textclausezSQLCompiler.visit_textclauser sl 9zz#D   dD:-9J9J K"" OOd44Z__E   r c "|j }|r |jn|jd}tt|d}|jj||jr|j |||xs-|dk(xr|j ddxs|j dd}|rp|jx|_|_ |j xrt|j|_ |jD] } |j| d|j"|j|jfi|} |j r.|st#|jnd} |j%| | z} |jj'd| S) Nrr!r r$rr(Fr'T)rkr nesting_level)r_default_stack_entryr~r_independent_ctes_dispatch_independent_ctesrrbrCrAr& column_argsrDr_add_to_result_maprrUr_render_cte_clauser) rtafcompound_indexrbrtoplevelr new_entrypopulate_result_maprrrs r visit_textual_selectz SQLCompiler.visit_textual_select szz>-5))4::b> #uE* )$   + +C 4  >!#EII yy5u=   D !D$A 47>>/A0dGD ,__  *.&*&=&= t||CKK.2. 993;C OM***G$ND r r c yNNULLr rr rs r  visit_nullzSQLCompiler.visit_null r c 2|jjryy)Nr1rsupports_native_booleanrs r  visit_truezSQLCompiler.visit_true s << / /r c 2|jjryy)Nr0rrs r  visit_falsezSQLCompiler.visit_false s << / /r c J|jdfd|DDS)Nc3$K|]}|r| ywrr r9ss r r;z7SQLCompiler._generate_delimited_list.. s   c3DK|]}|jfiywrrr9rrrs r r;z7SQLCompiler._generate_delimited_list.. s$I1*a**4626Irr)rr separatorrs` `r _generate_delimited_listz$SQLCompiler._generate_delimited_list s&~~ II   r c ttjjtjtj j tjj |\}}|dk(r|djfiSttj}|jdfd|DDS)Nrrc3$K|]}|r| ywrr rs r r;z;SQLCompiler._generate_delimited_and_list.. s""rc3DK|]}|jfiywrrrs r r;z;SQLCompiler._generate_delimited_and_list.. s$Lq.!..t:r:Lr) rBooleanClauseList_process_clauses_for_booleanr!and_rL _singletonrIrrr)rclausesrlccrs` ` r _generate_delimited_and_listz(SQLCompiler._generate_delimited_and_list s11NN NN NN % % OO & &   W !8071:00<< <!)..1I>>"LGL" r c .d|j|fi|zSN(%s))visit_clauselist)r clauselistrs r  visit_tuplezSQLCompiler.visit_tuple s ---j?B???r c |j}|d}nt|j}|j|j|fi|SNr,)r@rrr)rrrseps r rzSQLCompiler.visit_clauselist sG!! ;CJ//0C,t,,Z-?-?KKKr c |j}|j|dd}|r |||fi|S t|}d|d<|j|j|fi|S#t $r}t j|||d}~wwxYw)Nexpression_clauselistT_in_operator_expression)r@_get_operator_dispatchrrrrmr2r)rrr operator_dispopstringrs r visit_expression_clauselistz'SQLCompiler.visit_expression_clauselist s'' ** .   I44 4  +H-1B( )0400""H02   L11$ B K Ls A A>"A99A>c dd}|j#||jj|fi|dzz }|jD]8\}}|d|j|fi|zdz|j|fi|zdzz }:|j&|d|jj|fi|zdzz }|dz }|S)NzCASE r,zWHEN z THEN zELSE END)rrwhenselse_)rclauserxcondrEs r  visit_casezSQLCompiler.visit_case s  << # 000@@3F FA"LL LD& )$))$9&9:,&++D;F;<  A  << # 9&,,99$I&IICO A U r c <|jj|fi|Sr)typed_expressionr)r type_coercers r visit_type_coercezSQLCompiler.visit_type_coerce s >{++>>tJrJJr c |jj|fi|}tjd|}d|jj|fi|d|r|j dn|d|r|j dSdS)Nz(.*)( COLLATE .*)zCAST(rrr'r1r)rrr]matchrr)rrr type_clausers r  visit_castzSQLCompiler.visit_cast s8doo88HH ,k: *DKK * *4 :6 :#EKKN 4#EKKN +  *, +  r c p|dtjurdn|dtjurdnh|ddkr5|jtjt |dfi|dn+|jtj|dfi|dd|dtjurdS|dtjurdS|ddkr7|jtjt |dfi|dS|jtj|dfi|dS) NrzUNBOUNDED PRECEDINGz CURRENT ROWz PRECEDINGz FOLLOWINGrrzUNBOUNDED FOLLOWING)rRANGE_UNBOUNDED RANGE_CURRENTrliteralabs)rrange_rs r _format_frame_clausez SQLCompiler._format_frame_clause$ s}!9 8 88&ayH$:$::""!9q= )DLL ( 0 0VAY @DF(4<<(8(8(CJrJM(!9 8 88&+' ' 2ayH$:$::"+' ' B"!9q= )DLL ( 0 0VAY @DF +' ' F(4<<(8(8(CJrJM+' ' r c 8|jj|fi|}|j!d|j|jfi|z}n\|j!d|j|jfi|z}n/|j !d|j|j fi|z}nd}|ddj d|jfd|jffDcgc]*\}}|#t|r|d|j|fi|,c}}|r|gngzd Scc}}w) NzRANGE BETWEEN %szROWS BETWEEN %szGROUPS BETWEEN %sz OVER (r, PARTITIONORDERz BY r') rrr"r#rowsgroupsr partition_byorder_byr)roverrrr"wordrs r  visit_overzSQLCompiler.visit_overN sT.t||..t>v> ;; "'*C$*C*C +%+FYY "&)B)B)B *#*F[[ $(+D4+D+D ,%,FF  HH %d&7&78 $--0)%f)c&k 6V66tFvFH &F82 /   s/Dc ~|jj|fi|d|jj|fi|dS)Nz WITHIN GROUP (ORDER BY r')rrr*)r withingrouprs r visit_withingroupzSQLCompiler.visit_withingroupo sB 2K   2 24 B6 B 3K 3 3D CF C  r c ~|jj|fi|d|jj|fi|dS)Nz FILTER (WHERE r')funcr criterion)r funcfilterrs r visit_funcfilterzSQLCompiler.visit_funcfilteru s@ .JOO . .t >v > 3J 3 3D CF C  r c |jj|j|j}d|d|jj|fi|dS)NzEXTRACT(rr') extract_maprfieldr r)rextractrr8s r  visit_extractzSQLCompiler.visit_extract{ sH  $$W]]GMMB  +GLL + +D ;F ;  r c r|j|jfi|}|j|fi|}d|d|S)Nr&z).)visit_functionfnr)rrr compiled_fn compiled_cols r visit_scalar_function_columnz(SQLCompiler.visit_scalar_function_column s?)d))'**;; (t((7B7 '66r c x|4||j|j|jf|jt|d|jjzd}|r ||fi|}n8tj |j jd}|r|jri|dz }nc|j}|jj|st|tjr|jj|n|}|dz}dj|j Dcgc]T}|jj|st|tjr|jj|n|Vc}|gzd|j"|fi|iz}|j$r|dz }|Scc}w)Nz visit_%s_funcz%(expr)sr)r z WITH ORDINALITY)rrgetattrlowerrr _deannotater _has_argsr_requires_quotes_illegal_charsrrr.rr packagenamesfunction_argspec_with_ordinality)rr2rrr rrr s r r<zSQLCompiler.visit_function s  ( diiTYYL$)) Lt_tyy/@@$G ''D==!1!1!3!=!=tDD>>J&Dyy}}CCDI!$(<(<=MM''-  j(88 $00  ==GGL%dH,@,@A ++C0!!&  ...t>v>? @D  & &D s*AF7c 8|j|jSr)visit_sequencesequence)r next_valuers r visit_next_value_funcz!SQLCompiler.visit_next_value_func s"":#6#677r c Ftd|jjz)Nz2Dialect '%s' does not support sequence increments.rrrrrLrs r rKzSQLCompiler.visit_sequence s$! @ll   r c <|jj|fi|Sr) clause_exprr)rr2rs r rHzSQLCompiler.function_argspec s 2t224B6BBr c j }|j|fi}|rjs|_|j}|r jnjd}|xs| xr|j dd} |dk(r||d<jj |d|d||| d|jrj|j|j} d | zd zjfd t|jD} dd <| j|fitdd iz } | j |fiz } |j"r| j$|fiz } j&r/|st)jnd} j+| d | z} jj-d| S)Nrr(Frr)r!r )r!r r$r%r(r,c3PK|]\}}|jf|dyw))rbrNr)r9rrrbrrs r r;z4SQLCompiler.visit_compound_select.. sA Aq%$$!'=C s#&rrbTrinclude_following_stackr )r_compile_state_factoryr%r/rrrrrcompound_keywordskeywordrrselectsgroup_by_clauserorder_by_clause_has_row_limiting_clause_row_limit_clauserUrrr) rcsrbrrrr% compound_stmtrneed_result_maprZrrs ` ` ` r visit_compound_selectz!SQLCompiler.visit_compound_select szz>111"dEfE D..!.D %// -5))4::b>"   A 8%@  Q  "E*  #():#; %n 5 !.0?     * *  + +M6 B((4g #)) &bjj1   #( $$$RI4+Hv+H+HII $$$R2622 & & *D**288 8D 993;C OM''"/,0(   r r c f|j|j|fi|S|j|fi|Sr) _fetch_clause fetch_clause limit_clause)rr`rs r r_zSQLCompiler._row_limit_clause s>   '$4$$R262 2$4$$R262 2r cRd|jd||rd|znd}t||dS)Nvisit_r$r)rrB)rr  qualifier1 qualifier2attrnames r rz"SQLCompiler._get_operator_dispatch s5     *C*  2  tXt,,r c "|||fz }||d<||d<|jry|jrtjd|j |jdd}|r|||jfi|S|j |t |jfi|S|jrX|j |jdd}|r|||jfi|S|j|t |jfi|Stjd)NrrzFUnary expression does not support operator and modifier simultaneouslyunaryr@modifierz,Unary expression has no operator or modifier)r@ror2rr _generate_generic_unary_operatorr _generate_generic_unary_modifier)rrnrrrr s r  visit_unaryzSQLCompiler.visit_unary s8  ( 5( * &7B" #'9B# $ >>~~&&2..DE5>>8R88>8R88 r c |jjr|j|jfi|dz|jt j |j |j jjtjur|j jntjfi|zS|j|jfi|dz|j|j fi|zS)N / ) rdiv_is_floordivrrrCastrr_type_affinityr%Numericrrr@rs r visit_truediv_binaryz SQLCompiler.visit_truediv_binary6 s << ' ' V[[/B/$,,MM  &||00??'// 0#LL--"*!1!1!3     ( V[[/B/$,,v||2r23 r c |jjrn|jjjt j ur>|j|jfi|dz|j|jfi|zSd|j|jfi|dz|j|jfi|zzS)Nrtz FLOOR(%s)) rrurrrwr%Integerrrrys r visit_floordiv_binaryz!SQLCompiler.visit_floordiv_binaryQ s LL ( ( !!00H4D4DD V[[/B/$,,v||2r23   V[[/B/$,,v||2r23 r c |js|jjr|j|jfi|Sd|j|jfi|zS)Nz%s = 1_is_implicitly_booleanrrrrrrr@rs r visit_is_true_unary_operatorz(SQLCompiler.visit_is_true_unary_operatorb sQ  * *||334<<626 6ldll7??AbAA Ar c |js|jjr d|j|jfi|zSd|j|jfi|zS)NNOT %sz%s = 0rrs r visit_is_false_unary_operatorz)SQLCompiler.visit_is_false_unary_operatork sV  * *||33ldll7??AbAA Aldll7??AbAA Ar c Jd|j|tjzS)Nr)override_operator) visit_binaryr!match_oprys r visit_not_match_op_binaryz%SQLCompiler.visit_not_match_op_binaryt s,$++ i&8&8,   r c >d|j|t|fi|zSr)_generate_generic_binaryrrys r visit_not_in_op_binaryz"SQLCompiler.visit_not_in_op_binaryy s3555 Ih' +-   r c |tjur*t|dkDrddjd|DzSy|tjur*t|dkDrddjd|DzSy|j |S) Nrz(%s)) OR (1 = 1rc3 K|]}dywrNr r9rs r r;z6SQLCompiler.visit_empty_set_op_expr.. :f: zNULL) OR (1 = 1z(%s)) AND (1 != 1c3 K|]}dywrr rs r r;z6SQLCompiler.visit_empty_set_op_expr.. rrzNULL) AND (1 != 1)r! not_in_oprrin_opvisit_empty_set_expr)rr expand_oprs r visit_empty_set_op_exprz#SQLCompiler.visit_empty_set_op_expr s  ++ +5zA~(II:E::) )// )5zA~*II:E::+,,U3 3r c Ftd|jjz)Nz3Dialect '%s' does not support empty set expression.rPr element_typesrs r rz SQLCompiler.visit_empty_set_expr s$! All   r c jjj}|s|jrOjjrdndj jj jz}d|fSj jgj}d|fS|jsB|jrt|dtjrst|dttfsZ|jr tdjjrdnddj!fdt#|Dz}d|fS|rj$}|j'|}|r|j)dsJd|j)dj+d }|d |d c dj! fd |D}d|fSdj!fd |D}d|fS)NVALUES rrz?bind_expression() on TupleType not supported with literal_bindsrc 3K|]B\}}ddjfdt|jjDzDyw)rrc3HK|]\}}j||ywrr)r9r param_typers r r;z[SQLCompiler._literal_execute_expanding_parameter_literal_binds... s*-E:11%DrN)rrrr)r9rrrrs r r;zQSQLCompiler._literal_execute_expanding_parameter_literal_binds.. sQ %A}II14)9>>+?+?2 sAA r1)unexpected format for expanding parameterrrrc3bK|]&}j|j(ywrrr)r9rrrrrs r r;zQSQLCompiler._literal_execute_expanding_parameter_literal_binds.. s73  11%H 3s,/c3VK|] }j|j"ywrr)r9rrrs r r;zQSQLCompiler._literal_execute_expanding_parameter_literal_binds.. s*3--eY^^D3r:r )rrrrtuple_in_valuesrrr_isnullrcollections_abcrrbytes_has_bind_expressionrrrrsearchrr) rrrbind_expression_templatetyp_dialect_implreplacement_expressionpost_compile_patternrr rrs `` @@r 2_literal_execute_expanding_parameter_literal_bindsz>SQLCompiler._literal_execute_expanding_parameter_literal_binds s%>>AA$,,O  ..!%!=!=I200NN(()*=*=*&z)))m*.)E)E^^$i&9&9*&l)))e , ,  $ $6!9o&>&>?vay3,744)$ "\\99 r )2&(9   & "N)))1('+'A'A$(//0HIQWW?>?ggaj&&t,$'FCF!)-3"(3*&))) *.3!'3*& )))r c p jrj|Sj}jj | j r j n j jjr jr  fd n fd |smg jr4jjjj} |fSjjgj} |fS jsB jrt|dt j"rt|dt$t&fs j(rJt+|dD cgc]%\}}t+|dD]\}} |d|d|| f'c} }}} |j,rdnddj/ fd t+|Dz} |fSt+|dD cgc]\}} |d|| fc} } dj/ fd  D} |fScc} }}}wcc} }w) NcHjjd|izSNr)render_bind_castr)r bind_templaterrrs r _render_bindtemplatezNSQLCompiler._literal_execute_expanding_parameter.._render_bindtemplate s,,,NN$!VTN2r cd|izSrr )rrs r rzNSQLCompiler._literal_execute_expanding_parameter.._render_bindtemplate s$~55r rrr$rrrc3zK|]0\ddjfdtDz2yw)rrc3^K|]$\}}tz|zd&yw)rN)r)r9rrrrrrs r r;zMSQLCompiler._literal_execute_expanding_parameter... s@%Au-%a#m*<&. sD %A}II)2-(@  s6;c34K|]\}}|ywrr )r9r:rrs r r;zCSQLCompiler._literal_execute_expanding_parameter.., s /.8c5$S)/r6)rrrrrrEr?r>_bind_typing_render_castsrrrrrrrrrrr _is_arrayrrr)rrrrrrrrrrrrrrs` ` @@@@r rz0SQLCompiler._literal_execute_expanding_parameter sQ  $ $JJ6 ,,$>>AA'J    99M --M LL 2 2 11   6I..)-)E)ENN(()*=*=*&V000O*.)E)E^^$i&9&9*&N000G , ,  $ $6!9o&>&>?vay3,7'11 11)2&!(<$A} )- ;Au $Q*E22I%44 " )2&(9   & ".000 !*&! 4Au!!$e,I&*YY/(>?6<<)?)?@$(B !%8 **9hE  0R0 0 $Y/5t44!,(;    P55dIFCO Ps F.. G7GGc <|j|jfi|Sr)r sql_functionrs r &visit_function_as_comparison_op_binaryz2SQLCompiler.visit_function_as_comparison_op_binaryj st||G007B77r c &|jjr>|j|jfi|dz|j|jfi|zS|j|jfi|dz|j|jfi|zS)Nz %% r)rrrrrrys r visit_mod_binaryzSQLCompiler.visit_mod_binarym s == ) ) V[[/B/$,,v||2r23  V[[/B/$,,v||2r23 r c |j|d<|j|d|j|jzdzfi|S)Nrr,)rrrr rs r visit_custom_op_binaryz"SQLCompiler.visit_custom_op_binary{ sS'66 ,t,,  $,,X->->? ?# E   r c b|j||j|jdzfi|Sr)rprr rs r visit_custom_op_unary_operatorz*SQLCompiler.visit_custom_op_unary_operator s:4t44 T//0A0ABSH LN  r c b|j|d|j|jzfi|Sr)rqrr rs r visit_custom_op_unary_modifierz*SQLCompiler.visit_custom_op_unary_modifier s:4t44 S455h6G6GHH LN  r c |jdd}d|d<|j|d<|jj|fd|i||z|jj|fd|i|z}|r|rd|z}|S)NrFT _binary_oprr)rr@rrr)rrr rrrrs r rz$SQLCompiler._generate_generic_binary s#%&&)BE"J(, $%!??< *FKK * * %3 79  .fll--%379    #~D=D r c B||jj|fi|zSrr`rrnr rs r rpz,SQLCompiler._generate_generic_unary_operator s$:%--::4F2FFFr c B|jj|fi||zSrr`rs r rqz,SQLCompiler._generate_generic_unary_modifier s#/u}}//;;hFFr cLtjdtjS)Nz'%')r)rliteral_columnr% STRINGTYPEr>s r _like_percent_literalz!SQLCompiler._like_percent_literal s&&uH4G4GHHr c Dd|jj|fi|dS)Nzlower(r'r`rs r $visit_ilike_case_insensitive_operandz0SQLCompiler.visit_ilike_case_insensitive_operand s):::4F2FGqIIr c |j}|j}|j|jj||_|j||fi|Sr_clonerconcatrvisit_like_op_binaryrrr@rpercents r visit_contains_op_binaryz$SQLCompiler.visit_contains_op_binary sQ,,~~fll3::7C (t((@R@@r c |j}|j}|j|jj||_|j||fi|Srrrrrvisit_not_like_op_binaryrs r visit_not_contains_op_binaryz(SQLCompiler.visit_not_contains_op_binary sQ,,~~fll3::7C ,t,,VXDDDr c |j}|j}t|j|_|j t|j j ||_|j ||fi|Srrrrrrrvisit_ilike_op_binaryrs r visit_icontains_op_binaryz%SQLCompiler.visit_icontains_op_binary sl,,,V[[9 ~~ "6<< 0 &/  *t))&(AbAAr c |j}|j}t|j|_|j t|j j ||_|j ||fi|Srrrrrrrvisit_not_ilike_op_binaryrs r visit_not_icontains_op_binaryz)SQLCompiler.visit_not_icontains_op_binary sl,,,V[[9 ~~ "6<< 0 &/  .t--fhE"EEr c |j}|j}|j|j|_|j||fi|Sr)rr_rconcatrrrs r visit_startswith_op_binaryz&SQLCompiler.visit_startswith_op_binary sH,,'' 5 (t((@R@@r c |j}|j}|j|j|_|j||fi|Sr)rrrrrrs r visit_not_startswith_op_binaryz*SQLCompiler.visit_not_startswith_op_binary sH,,'' 5 ,t,,VXDDDr c |j}|j}t|j|_|j t|j |_|j ||fi|Sr)rrrrrrrrs r visit_istartswith_op_binaryz'SQLCompiler.visit_istartswith_op_binary s^,,,V[[9 ''(>v||(LM )t))&(AbAAr c |j}|j}t|j|_|j t|j |_|j ||fi|Sr)rrrrrrrrs r visit_not_istartswith_op_binaryz+SQLCompiler.visit_not_istartswith_op_binary s^,,,V[[9 ''(>v||(LM -t--fhE"EEr c |j}|j}|j|j|_|j||fi|Srrrs r visit_endswith_op_binaryz$SQLCompiler.visit_endswith_op_binary sF,,~~fll3 (t((@R@@r c |j}|j}|j|j|_|j||fi|Srrrs r visit_not_endswith_op_binaryz(SQLCompiler.visit_not_endswith_op_binary sF,,~~fll3 ,t,,VXDDDr c |j}|j}t|j|_|j t|j |_|j ||fi|Srrrs r visit_iendswith_op_binaryz%SQLCompiler.visit_iendswith_op_binary s\,,,V[[9 ~~&>..t||+>>** :> @&&)*<*<((Y-?-?"..&  "..0@"#,--5  8A@ 9==!DJJt$4// #JD$++ /66T>bffBHOOI. /   &*D # !+/(++ {:+((YK7(#d##  %))$>>       3,C r ctrr)rr dbapi_typerYs r rzSQLCompiler.render_bind_casts !##r c |tur|}n|j|jx|jdd}|rC|tj tj fvr!tjd|jf|jtjfi|S|j}|jr|j}||||\}} | S|j!||j"S)NrzBound parameter '%s' rendering literal NULL in a SQL expression; comparisons to NULL should not use operators outside of 'is' or 'is not')r)r-rrrr!is_is_notr& warn_limitedr:rr%rrrrrr) rrrrrropleeprrs r rz$SQLCompiler.render_literal_bindparams v -(E&9+=+=+EVVL$/"Y]]I4D4D$EE%%@#(  $t||H$5$5<<<--E   JJD*.)A+ 'I' $ #,,UINNC Cr c|9|js-|jtjj S|j |j }|r ||Stjdtj|d|#t$r5}tjdtj|d|d|d}~wwxYw)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. Nz Could not render literal value "z" with datatype z); see parent stack trace for more detail.z:No literal value renderer is available for literal value ") should_evaluate_nonerrrK _instance_cached_literal_processorrrr2rsql_util_repr_single_value)rrr processores r rz SQLCompiler.render_literal_values =!;!;<< 7 7 9: :33DLLA   ''""//678!!&)  && 33E:;<%g##   sB C0C  Cc||jvr|j|S|j}t|tjr|j d|}||j|<|S)Nr)r:r:rrrCr)rrrs r r!zSQLCompiler._truncate_bindparamDs^  '??9- -MM i!:!: ;22; JI&/ "r c||f|jvr|j||fS|j|j}t||jdz kDr]|j j |d}|dt|jdz ddzt|ddz}|dz|j |<n|}||j||f<|S)Nrrr$r1) rq apply_maprprrnrrrmaxhex)r ident_classranonnamecounter truncnames r rz!SQLCompiler._truncated_identifierQs  $"6"6 6''d(;< <>>$--0 x=4,,q0 0..22;BGS!2!2Q!6:;g,qr"#  5jj|r#jj fd|} |}| }|r"j j ||i_|rGd|z} |r| S|:|jj} | jrj|| | } | Sjtjurjd|iz} njd|iz} |Pjj r:|jj} | jrj|| | } | S)Nc@j|jdS)Nr)r/r)rrs r rz.SQLCompiler.bindparam_string..sd88Dr z__[POSTCOMPILE_%s]r)addrr.rrrPrrrrender_literal_castrrrorpr?r>r) rrrr escaped_fromraccumulate_bind_namesvisited_bindparamrnew_namerO type_impls ` r rzSQLCompiler.bindparam_stringiss ! , ! % %d +  (  $ $T *&&--d3 2266D $  &*&=&=&C&Ct$'D # &-C )*BBLL 00// 3OCJ ZZ=22 2//64.@C##vtn4C  & 66&>>t||LI))++NIsK r c|j}|jddt|j|jD]\}}|j |fd|i|y)Ncte_opts)copyrrr_independent_ctes_optsr)rstmtrlocal_kwcteopts r rz&SQLCompiler._dispatch_independent_ctessb779 Z&  " "D$?$?  CHC #C " "4 B# B B Cr c N j} | jusJ||d<|j} t| tj rj d| } d} d} |j} |jxs |j}| jvrj| \}}}|| k(sJ|| f}j|}|jr|jrtjd|| f}|rtjnd}|| fx}}j|=|j|<||fzj| <n=|rtjnd}|| f}|jvrj|}nd}|||u} ||jus||urd} n||jur-| |=|j}|| usJ||usJj|=n[t!|t!|k(s)|j" |j"|j%|rd} ntjd| z|s| sy|j&O|j&}|j&j}t|tj rj d|}n|}d}| r|j|<||fzj| <|jvrj(|fi||ss|| vrn|j*rd_j.j1|| }|j*s|j2j4r^|j2}|j7dDcgc]\}}}}}|s|xs|}}}}}}|dd j9fd |Dzz }|j;d ddusJjs|j2j<fd |i|Sj>||j@fi|} |j2j<fd di|}!|d | d|!dz }|jBr$|dj>||jBfi|zz }|| |<|r|r| |jD|jG<| s| rj.j1|| S|rhj.j1||}j.jI| rj.jK| } |jM| z }|Sj.j1|| Sycc}}}}}w)N visiting_cterTFz6CTE is stated as 'nest_here' in more than one locationrz5Multiple, unrelated CTEs found with the same name: %rrrc3lK|]+}jj|j-yw)rEN)rformat_label_namerp)r9identrs r r;z(SQLCompiler.visit_cte..Xs8"!&!MM;; % <"s14subqueryrbrz (r'r,)'rrUrrrrCr_get_reference_ctenestingrWrVr2rrr _restateshash _is_clone_ofcompare _cte_alias visit_cte recursiverXr format_aliasrname_cte_columns_generate_columns_plus_namesrrr_generate_prefixes _prefixes _suffixesrr)_requires_quotesrget_render_as_alias_suffix)"rrWrbashint fromhintsrZrrRr self_ctescte_name is_new_cteembedded_in_current_named_cte_reference_cter` cte_levelr$existing_cte_optscte_level_name existing_cteold_level_namenew_level_nameexisting_cte_reference_cte pre_alias_ctecte_pre_alias_namer col_source proxy_namefallback_label_namerrepeated recur_colsprefixesrs"` r rfzSQLCompiler.visit_ctes((* DII%%%!$~88 h 9 9 :11'8DH (-%//1++1!1!1 T33 3.2.D.D/ +Iq+= ='2N22>BL $,,**1 #,X!6/6C OA 3> %NNM!$!4!4 ,h.G.GH%)%?%?/&" M!%  69D # #N 35CG6D " "> 2DII-}77%#Y*>==*.D'}}11#x@==CKK$@$@!$J")EEdK"" &/$',9z9 "J" F "*4 "Dzz*e4===zz:3;;99%+/5 7t66S]] .4 H;CKK::%)-3Eh>>D==C"9$"9"9S]]#.4#D"& # 5= !!#--/2"?}}11#x@@!}}11#7IJ==11(;#}}228.s{ !MM//9 $)#@#@ !&"M$,,"E"E"M"M$'HH#"06#"!" &( !( sA3A6r)rrrrrrrCrrrhrr)ro_supports_derived_columns_render_derivedrrformat_from_hint_text)rrrbrprrqr^rrrrr alias_namerOs`` ` r rzSQLCompiler.visit_aliass/ "&0((((.3*+ )7'610;,-  &?+B+Be+K4EMM44 # %  EVw"')L(-F$ % V%**h&?&?@!77L "ZZ ==--eZ@ @ 7A !!%//"344EMM44!76<E"')$99 **5*=C..53H3HvII$)77$Ui/00 % 0&J45==33%)/ r c 2d|d<|j|fi|S)NTr^r)rr^rs r visit_subqueryzSQLCompiler.visit_subquerys#:t/B//r c 8d|d<d|j|fi|zS)NTrz LATERAL %sr)rlateral_rs r rzSQLCompiler.visit_laterals)9 .d..x>2>>>r c |j|fddi|d|jj|fi|}|j#|d|jj|fi|zz }|S)NrbTz TABLESAMPLE z REPEATABLE (%s))r _get_methodrseed)r tablesamplerbrrs r visit_tablesamplezSQLCompiler.visit_tablesamples D  [ < < < 8K # # % 8 8 D D     ' &3   33D?B? D r c jdjdjfdjD}d|S)Nrrc 3K|]I}|D]B}jtj|djij fiDKyw)rN)rrr _column_typesr)r9chunkelemrrrs r r;z-SQLCompiler._render_values..sk     DLL26!//*,        AAr) setdefaultrr_data)rrrtupless``` r _render_valueszSQLCompiler._render_valuessG ow'<'<=  !   !!r c |jrj|j|fi}|jrd}nMt |j t jrjd|j }n |j }|jrd}nd}|r|r!||nd|j|j<|1|j|ur#|jrtjd|S|r`dd<|d|d jj j#|d d j%fd |j&Dd }|S|d|d }|S) NrzLATERAL rz(unnamed VALUES element)z5Can't use a LATERAL VALUES expression inside of a CTEFrr&r' (rc3DK|]}|jfiywrrrs r r;z+SQLCompiler.visit_values..Es+" !1A00<<"r)rrr_unnamedrrrrCrrrr)rr2rrorrrcolumns) rrrbrrZrrrrs ` ` r  visit_valueszSQLCompiler.visit_valuess\  $ $  + +GR 8 D   .2 .   D  h&?&? @--h ED<.add_to_result_maps&wwj%Hr c$||f|z|yrr )rrrrrrs r rz;SQLCompiler._label_select_column..add_to_result_maps&y7':Er NzX_label_select_column is only relevant within the columns clause of a SELECT or RETURNING)rz*proxy_name is required if 'name' is passedTF)rkrr)rrr_has_column_expressioncolumn_expressionrrrrJrrrrrGrr TextClauseUnaryExpressionr@r!is_falseis_truer_wraps_unnamed_column NamedColumn_non_anon_label_anon_name_labelrCrwr)rrrrrbrrrrrkcolumn_is_repeatedneed_column_expressionsrr&col_exprr result_exprrender_with_labelrs ` @r rz SQLCompiler._label_select_columns {{'' 5  & & #':--f5HH  !% 7 7  "%6"I '%6" !% %  : $ fhnn -v%+fkkfnn5F ' & <; <&( $$ K&v%%)!FH$9$9:1"---1 D0" FH$7$78$)!FH$<$<=P%.. 0A0ABCE $ D DD 335 ""vx';';<**2$(!$)! * 211*0*A*A'&+X-F-F--.AB- $,1j] ' !!"7/' " .{--dI6HIIr c>|j||}|r|d|zz }|Sr)get_from_hint_text)rrYrhintrhinttexts r rz!SQLCompiler.format_from_hint_textTs***5$7  sX~ %Gr cyrr )rbyfromss r get_select_hint_textz SQLCompiler.get_select_hint_textZr cyrr rrrs r rzSQLCompiler.get_from_hint_text]sr cyrr rs r get_crud_hint_textzSQLCompiler.get_crud_hint_textbrr c$dj|Srr)r hint_textss r get_statement_hint_textz#SQLCompiler.get_statement_hint_textesxx ##r r$rr!r c |j }|r |jn|jd}|j||}|d}|d} |r&|s$|j|j | d} | S|j|| } | S)Nrr!r r explicit_correlate_fromsimplicit_correlate_froms)rrrX_get_display_froms difference) r select_stmtrbrrrrr%r!r rs r _display_froms_for_selectz%SQLCompiler._display_froms_for_selectoszz>-5))4::b>#::;M  12^, '!44)8)C)C **, 5E "44)8)55E r translate_select_structurec  %|Jdd| d<|j||fi| } | j| d<| j}|j } | r|js| |_|duxs|} |j r?|j |fd|i| } | |ur&| }|}| }|j||fi| } | j}| r |j n|jd}| xs&|jddxs|jddx}}|rd}|sd | vr| d =|j|| ||||}| j}|jddd d }|jr|j|\}}|r ||d zz }nd}|jr|j|| |jr!||j ||jfi| z }||j"|fi| z }| j$Dcgc]#\}}}}}|j'|||||||||| %c}}}}}Dcgc]}||}}|r|t)t+| j$Dcgc] \}}}}}| c}}}}}j$Dcgc] \}}}}}| c}}}}}%|j,D cgc]'\}}}} t/||t1%fd|D| )c} }}}|_|j3||| |||| | }|j4rQ|j4D!"cgc]!\}!}"|!d|j6j8fvr|"#}#}!}"|#r|d |j;|#zz }|j<r2| r| r.| st?|jnd}$|jA|$|z}|jBr$|d |j ||jBfi| zz }|jjEd|Scc}}}}}wcc}wcc}}}}}wcc}}}}}wcc} }}}wcc}"}!w)NzpSQLAlchemy 1.4 requires use of the translate_select_structure hook for structural translations of SELECT objectsFrkrrbrr(r'r)rrkzSELECT r,)rrrrrc3BK|]}j||ywrr/)r9orUs r r;z+SQLCompiler.visit_select..9s$FQY]]1a%8$Fsrr)#rX_ambiguous_table_name_mapr/rr%rrr_setup_select_stackrSrw_hints_setup_select_hintsrrrlrkget_select_precolumnscolumns_plus_namesrrrrrr=_compose_select_body_statement_hintsrrrrUrrrmr)&rrrb insert_intorqrselect_wraps_forrrrr%ris_embedded_selectnew_select_stmtcompile_state_wraps_forrrrrrr hint_textbyfromrrrrrr inner_columnsr:rr dialect_nameht per_dialectrrUs& @r  visit_selectzSQLCompiler.visit_selects '  - '+0&': ::  !'   3 3 )*$-- zz> D..!.D +47F;  * *=d==$*.4O k1*7'#. - B B B!)/! ,55 -5))4::b>  >yy7? >yy5u= 5 "'  #':f'D*+(( vw $[[]!!$)E J     $ 8 8 E Iv C'F  ( (  + +K @  +D++[226< D ***;A&AA.#55''#))'&)(;'/,C*  *}-   4 #3#?+==  &/ $  $5GG  &/ $  I:.2-A-A $$*CsE#u$F#$FF$D ((            ' '+6*F*F&\2C):):#;;K d::;GGG 990H3;C OM***G$ND  C1$11[226< D r y @  $&s$&(O  OO+O(,O1 &O9c |jjDcic];\\}}}|d|jjfvr||d|j |diz=}}}}|j |}||fScc}}}w)NrrT)rp)rrxrrrr)rrrrrrrs r rzSQLCompiler._setup_select_hints`s /5mm.A.A.C  + (3 1 122 8u//T/BCD D  --f5 &   sAA8c |d}|d}|dk(r||d<nf|rd|d} t| j} t|j| k7r2tjdd| |dzt|jfz|r%|s#|j |j |d} n|j ||} tt| } | j|} | | ||d }|jj|| S) Nr!r rr)z}All selectables passed to CompoundSelect must have identical numbers of columns; select #%d has %d columns, select #%d has %drr r)r r!r$r%) rrrr2rrrr~r*rrr)rrr%rrbrrr!r r)numcolsrnew_correlate_fromsall_correlate_fromsrs r rzSQLCompiler._setup_select_stackls; 12^, Q  &E*  Z(H(889G=334?&&! &*F889     '!44)8)C)C **, 5E"44)8)55E "-"78177H02 * * )$ r c ,|dj|z }|jtzr1tit } |jt z} |r | |_nd} d} |s|j}|r|dz }|jr8|dj|D cgc]} | j|fd|| d|c} z }nJ|dj|D cgc]} | j|fd| d|c} z }n||jz }|jr)|j|jfd| i|} | r|d| zz }| r| J| j|jr||j|fi|z }|j r'|j|j fi|} | r|d | zz }|j"r||j$|fi|z }|j&r||j(|fi|z }|j*||j,|fi|z }|Scc} wcc} w) NrFz FROM T)rbrqrrbrrz WHERE z HAVING )rrhrvrzr~rwrrstriprrrR_where_criteriarr_group_by_clausesr\_having_criteria_order_by_clausesr]r^r__for_update_argfor_update_clause) rrrr%rrrrrr warn_lintingfts r rz SQLCompiler._compose_select_bodys  -(( <<4 4$R/K<<,6L#. K L;;=D  J D}} "' -,, #'&,(3  %     "' -,, #'(3%    D%%' 'D  ! !111&&4?CIA a' * **      # # (D((:6: :D  " "111''+1A q((  # # (D((:6: :D  * * *D**6.sH $ {*ldll>O>O.O &F % %d 1b 1 s=Ar)rrUrrrs` ` r rkzSQLCompiler._generate_prefixess1 (0    cMF r cv|jsy|r|dkDrtj}t|jj D]g}|j |j \}}}|jxs |j}||k(xs |xr||dzk(} |r| sV|j|||<in |j}|syt|Dcgc]}|jc}} |j| dz} | dj|jD cgc]} | c} z } | dz } |r{|dkDrvt|j D]Z}|j |j \}}}|j|=|j||f=|j |j =\| Scc}wcc} w)z include_following_stack Also render the nesting CTEs on the next stack. Useful for SQL structures like UNION or INSERT that can wrap SELECT statements containing nesting CTEs. rrr,, z )rUr&rrkeysrWr_r`rvrgget_cte_preamblerrrV) rrrWrUrWrwrsrRr`is_rendered_levelrXcte_texttxts r rzSQLCompiler._render_cte_clause syy ]Q.##%DDIINN,- +040F0F**,1- 8X++9)9)9$-$>%+N ]Q=N0N" $5 IIcNS  +99Dt<cmm<=((83>FKK > >??E ]Q.DIIK( E040F0F**,1- 8XIIcN++Y,AB**3+A+A+CD  E=!?s F1 F6 c |ryy)NzWITH RECURSIVEWITHr )rrgs r rzSQLCompiler.get_cte_preamble>s #r c h|jrtjdd|jrdSdS)zcCalled when building a ``SELECT`` statement, position is just before column list. a DISTINCT ON is currently supported only by the PostgreSQL dialect. Use of DISTINCT ON for other backends is currently silently ignored, however this usage is deprecated, and will raise CompileError in a future release for all backends that do not support this syntax.z1.4versionrr) _distinct_onr&warn_deprecated _distinctrrrs r rz!SQLCompiler.get_select_precolumnsDs:     3   %..{6B6r c x|j|jttjfi|}|rd|zSy)z5allow dialects to customize how GROUP BY is rendered.z GROUP BY r)rrrr!comma_op)rrrgroup_bys r r\zSQLCompiler.group_by_clauseTsG1400  $ $i 0B0B&C GI  (* *r c x|j|jttjfi|}|rd|zSy)z5allow dialects to customize how ORDER BY is rendered.z ORDER BY r)rr rr!r#)rrrr*s r r]zSQLCompiler.order_by_clause_sG1400  $ $i 0B0B&C GI  (* *r c y)Nz FOR UPDATEr r!s r r zSQLCompiler.for_update_clauseksr c |jdtj|D cgc]"\}}}}} |j|||f|| ||d|$} }}}}} ddj | zScc} }}}}w)NT)cols)rrrr RETURNING r)rjr_select_iterablesrr) rrUreturning_colsrrrrrrrrs r returning_clausezSQLCompiler.returning_clausens222411.A3#  # )D ( (# %8#+%    ,dii000- s'A. c d}|j#|d|j|jfi|zz }|j4|j|dz }|d|j|jfi|zz }|S)Nrz LIMIT z LIMIT -1z OFFSET ) _limit_clauser_offset_clause)rrrrs r rgzSQLCompiler.limit_clauses    + K,$,,v/C/C"Jr"JJ JD  ,##+ % Jf.C.C!Jr!JJ JD r c ||j}|j}nddd}d}|jK|j}|r!|j|r|j }|j |fi|} |d| zz }n|r|dz }|O|r!|j|r|j }|d|j |fi||drdndd |d rd nd z }|S) NF)r with_tiesrz OFFSET %s ROWSz OFFSET 0 ROWSz FETCH FIRST rz PERCENTz ROWS r1z WITH TIESONLY)re_fetch_clause_optionsr/_simple_int_clauserender_literal_executer) rrrfrequire_offset"use_literal_execute_for_simple_intrfetch_clause_optionsr offset_clause offset_strs r rfzSQLCompiler.fetch_clauses  !//L#)#?#? /45#I   ,"11M2--m< - D D F %m:r:J '*4 4D  & &D  #2--l;+BBD  \0R029= 2E3K@ fL D  r c  r|r|j|j|<|s|r|jj|} |rG| rE|jj | dz|jj |j z} n|jj |j } | | j|ur_| s]|r[|j |vrM|jd||j } | |j|jjd| z} |r||vr|j| ||||} | Sy)Nr)rr) fullnamerrrrrrrrrorhr)rrrbrrprq use_schemarrrrrrO anon_names r  visit_tablezSQLCompiler.visit_tables9 ',~~K  e $ V#}}>>uE .MM../?@mm))%**56 mm))%**5(/*22%?,0 &>> $ : :!9%**!E!I ? ? 224C!CUi/00 % 0&Jr c |ri|jjtjt |j j t |jj |jrd}n|jrd}nd}|j j|fd|d||z|jj|fd|d|zdz|jj|fd|i|zS)Nz FULL OUTER JOIN z LEFT OUTER JOIN z JOIN Tr ON r) rrwrrr)rr*rrisouterronclause)rrrbrr join_types r  visit_joinzSQLCompiler.visit_joins      $ $!!dii556djj667  99+I \\+I I (DII ( ( !{ >D  ,djj++!{>D   /dmm.."-17  r c"|jjDcic]%\\}}}|d|jjfvr||'}}}}|j|vr+|j ||j||jd}||fScc}}}w)NrT)rrxrrrr)rrU table_textrrr dialect_hintss r _setup_crud_hintszSQLCompiler._setup_crud_hintss04{{/@/@/B  + )3 1 122 9   :: &33DJJ djj(A4Jj(( s*B c|jj}|j}|j}|y|jr'|j j |jd}n&|jj |jd}||zr|S|jr3tjd|dd|jjdy)a)given a :class:`.Table`, return a usable sentinel column or columns for this dialect if any. Return None if no sentinel columns could be identified, or raise an error if a column was marked as a sentinel explicitly but isn't compatible with this dialect. NrzColumn z@ can't be explicitly marked as a sentinel column when using the a dialect, as the particular type of default generation on this column is not currently compatible with this dialect's specific INSERT..RETURNING syntax which can receive the server-generated value in a deterministic way. To remove this error, remove insert_sentinel=True from primary key autoincrement columns; these columns are automatically used as sentinels for supported dialects in any case.) r"insertmanyvalues_implicit_sentinel _sentinel_column_characteristicsr is_autoinc_sentinel_col_autoinc_lookuprdefault_characterization _sentinel_col_non_autoinc_lookup is_explicitr2r<r)rr sentinel_optssentinel_characteristics sent_colsbitmasks r _get_sentinel_column_for_tablez*SQLCompiler._get_sentinel_column_for_table@s GG #(#I#I ,44   # . .77;;(AA1G;;??(AA1G 7 "  # / /)))A,(><<$$%&@ @  r c # @ABCDKj}|J|jsd} ntj|j} t |} |j rj jsd} d} nEj jr&|r)jr|j |jrd} d} nd} d} | rNttdt||dD]*\} \}}t|||g| r | |gngd| | || ,y|r,t!j"j$j&|}nd}|j(}|r||}d|d}|j+|d}j j,}|rAt j.}t |j0}||z }t3|||z |z}td t5|}td t5|}d}d} | |z| |zrdnd z}|j0}|J|r$|Dcgc]\}}}}|||||f}}}}}d xCDj6sj8r j8AniAt;|d } Afd @|j<rd }!nd }!ddj?@fd|D|!d}"| jAAfd|D}#| jC|#Dcic] }||d | }$}d Bnd }"t;}#i}$|j<rd|dBnd|dBt;}%|j0D]}&|%jE|&d|%r]jF}'|'Jt|'D()chc] \}(})|)|%vr|( }*}(})t3|*CtI|*dzDt |*DCz k(sJjJr9tMjNjP}+tMjR|+ddBB|r[|d |},|d |}-g|d |g|d ||r|}.n t |,}.r,fdtU|.DD/01cgc] \}/}0}1|/|0|1f }}0}/}1j6r|jV}2|2t |,d k(rdx}3}4|,}5n|,d dC}3|,d Dd}4CDfd|,D}5|j<r'd j?Bfdt|,Ddd}6nB|.zdd}6jJr9|2d kDr4|4rJCdz}7|2|.z|7z}8tYfdtU|7|8D}9|6|9z}6|j+d|6}:tYtZj\j_|5};|3|;z|4z};ng}<|$ja};t|,D]\}=}|"j+dtc|=}>|j<r|>j+dtc|=}>||;jE|#Dcic] }|d|=||c}|j+ddj?|<}:t|:|;||,| r|-D?cgc] }?| |? c}?ng|.| ||d | dz } |rZyycc}}}}wcc}wcc})}(wcc}1}0}/wcc}wcc}?ww)NTFzKSequence[Tuple[_DBAPISingleExecuteParams, _MutableCoreSingleExecuteParams]]rrr&r'__EXECMANY_TOKEN__zList[Sequence[Any]]rc|D]G}j||}|jjd|izjd|diz}I|S)Nr__EXECMANY_INDEX__)rrr>)r formattedr:rPrs r apply_placeholderszISQLCompiler._deliver_insertmanyvalues_batches..apply_placeholders slC,00c:C ) 1 1))VSM9))!cU*<#=>?!I! r z, _IMV_VALUES_COUNTERrrc3:K|]\}}}}||ywrr )r9r$r\ bind_keysr]s r r;z@SQLCompiler._deliver_insertmanyvalues_batches..s(6.Aq)Y#9i86rc3ZK|]"\}}}}|D]}j||$ywrr/)r9r$r_r:rPs r r;z@SQLCompiler._deliver_insertmanyvalues_batches..sC4&Aq!Y$4#&&sC0404(+z, _IMV_VALUES_COUNTER), z), rz\d+rc3HK|]}D]\}}}|d|||fyw)r$Nr )r9r~r:len_rgeneric_setinputsizess r r;z@SQLCompiler._deliver_insertmanyvalues_batches..esF/!.C/+Cs 5%)45/5/rr c3(K|] }| ywrr )r9r}expand_pos_lower_indexexpand_pos_upper_indexs r r;z@SQLCompiler._deliver_insertmanyvalues_batches..zs"&01GH&sc3ZK|]"\}}jdt|$yw)_IMV_VALUES_COUNTERN)rr)r9rr$executemany_values_w_commas r r;z@SQLCompiler._deliver_insertmanyvalues_batches..s3 !%17>> 5s1v rac3>K|]}j|ywr)r@)r9rrs r r;z@SQLCompiler._deliver_insertmanyvalues_batches..s)& >>?sC&rEXECMANY_INDEX__ri__)3rLrPr@rMrrErsupports_default_metavaluesupports_multivalues_insertrrNrLrrrrT functoolspartialrrrFrinsertmanyvalues_max_parametersr:rHminrrbrPr~rRrr"rrwr4r>rEr]r^r@rrangerJr=rr from_iterablerSrr)Err/r0compiled_parametersrd batch_sizerKrimv_sentinel_from_params lenparamsuse_row_at_a_time downgradedr\paramcompiled_paramrstimv_single_values_exprexecutemany_values max_paramstotal_num_of_paramsnum_params_per_batchnum_params_outside_of_batchbatchescompiled_batchesrXr]rHrr:r stall_keysimv_values_counterformatted_values_clausekeys_to_replacebase_parametersall_names_we_will_expandrr4rNrall_expand_positionsescapedrYcompiled_batchr[new_keyrcrnum_ins_paramsextra_params_leftextra_params_rightbatch_iteratorexpanded_values_stringrrxrrUrVreplaced_values_clausesrfmvr\r]rPrjrfrgsE` ` @@@@@r !_deliver_insertmanyvalues_batchesz-SQLCompiler._deliver_insertmanyvalues_batches~s $$&&$( !$,$7$7((% ! O   t||'N'N!% J99 #$$%%-1N1N !% J % J 5>a $78 6 115.-)G1/~>?+ .  ## 77%9C C!$!7!7 %()?%@ " !7 8:%%&8:NO \\AA "%doo"6 #&s'='=#> #&:: ("==+,J,d:.>? !4(;#< HL!Z/Z'AQ !33!--- +=""&CdBc3t9b)" " ;<;!7&&%)%<%<"%'":a=)H !''%<"%'"*+DII62D6-,""!'' # '334*<4O$..?Z]3''O*, &&( #!eO O''.//GH+011G0H-L*14 $.. 9(//Q8 9(".. "...&/{%;(!T77($( *--A)B&),-A)BQ)F&,--0FFGG""))D$G$GH-/VVy$d,F.*Aj)E-a ;N$&GAj !-/ Qz *%/"%(Z"$ /%*+=%>/++*sdC(+'+!$!B!B "Sq]2=??%(:%*N(-a1H2H(I%).q2H2I)J&&!&&N ++ )2%(8   r.*46HHr.*&&>A+= 2112Q6E(,>?%GC!&&!&uc!2&!I.Di-O*%.%6%6(*@&"',OO11.A'# &)*()$+-'&5&:&:&<# )% 0 HAu199*CFC//!kk*?QH+2237'..>MNsC51#c 2N &/%6%6(II56&" )"#'-:HH2*2.H"'  MHIo"P:(D+xOIsXHY%Y 1B"Y%Y #A;Y%Y.B5Y%#Y3FY% Y 9Y%Y &Y%?&Y%c |j|fi|}|j}|||d<d}n j }|r-d_js|_j s|_jj tt|dd}d}jr|g}tj|||fd|i|}jrB|@t|}jr)jxj|z c_ n|_ |j} | snjj sXjj"sBjj$s,t'j(djj*z|j,rjj.s,t'j(djj*zj0s |j2r!|j4rt'j(d |j} n |j} j6} jj } d } |j8r!| j:||j8fi|z } | d z } | j=|j>} |j@rjC|| \}} |jDrjG||| | z } | s| s,| d d jI| Dcgc] \}}}}| c}}zz } |jJ}d}d}d}j0xs |j2}|r|jL}||sJ| Dcic] \}}}}|| }}}}g}|D]7}||vrd}n/jO|}|||vrd}n|j |9|@jjPtRjTzrd}n|djVrJdtY|tY|z}j[|||}j\r | d|zz } nd}|j^j`jddfddi|}jbrLjjdr6|stjnd}| djg|d|z } n| d|zz } n| sf| rd| dz } |rtidjjjtmd| ||j4|jndu||r t|nd| _8n}|j,r*| dd jId|jrDz } nGd jItmd| Dcgc] \}}}}| c}}}|r |rjjPtRjtzr|jvsd}jjPtRjxz} d jIdt{| D}!| r$d jIfdt{| D}"n|!}"| d|"d|d|!d z } n d}| d!|d"z } tid|tmd| ||j4|jndu||r t|nd|||# _8n | d!|d"z } |jn'j`|jnfi|}#|#r| d|#zz } |rj\s| d|zz } jbrEjjds/|stjnd}jg|d| z} jj}d| Scc}}wcc}}}wcc}}w)$NrZFTrrrNzWThe '%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.zcRETURNING cannot be determinstically sorted when using an INSERT which includes multi-row values().zINSERT zINTO  (%s)rzTsentinel selection rules should have prevented us from getting here for this dialectrr,rr+rrVrz DEFAULT VALUESrG)rKrLrNrOrQz VALUES c3RK|]}ddjd|Dz!yw)rrc3*K|] \}}}}| ywrr )r9r$rs r r;z5SQLCompiler.visit_insert...s L>1a LsNr)r9crud_param_sets r r;z+SQLCompiler.visit_insert..s2'yy L^ LLNs%'c3,K|] \}}d|ywpNr )r9rr$s r r;z+SQLCompiler.visit_insert..s)$(Aq!A3)sc3K|]L\}^}}j|j|jjjd|Nywr)rrrr)r9rrr$rs r r;z+SQLCompiler.visit_insert..sT4 !-9C! !11 # # @ @ N"#A34sAAz SELECT z FROM (VALUES (z)) AS imp_sen(z#, sen_counter) ORDER BY sen_counterz VALUES (r') rErFrHrJrKrLrNrOrPrQrR)?rXr/rr1rr%rr~rbr_get_crud_paramsrrErR single_paramsrsupports_default_valuesrosupports_empty_insertr2rr_has_multi_parametersrpr7 _returning_sort_by_parameter_orderrrlrk format_tablerrrIrrruse_insertmanyvaluesuse_sentinel_columnsr,rKrarj_insert_sentinelrr,r;rrrUcte_follows_insertrrDdefault_metavalue_tokenr_post_values_clauserLall_multi_paramsrlis_default_metavalue_onlyrmrr)$r insert_stmtrNrZrr%rcounted_bindparamcrud_params_structcrud_params_singlerrrrGr$r rnamed_sentinel_paramsadd_sentinel_colsrQr+r param_names_params_by_col_add_sentinel_col param_namer, select_textrrrembed_sentinel_valuerender_bind_castscolnamescolnames_w_castpost_values_clauses$` r  visit_insertzSQLCompiler.visit_inserts~; ::  !# $--  #!-B~ H::~H  DM)))6&%%%2" #&5 #)  ! ??|3 !# !22      0     ??0< #$5 6 ""))5**.??*->D*/==#LL88LL;;LL66""!\\../   . .<<;;&&137<<3D3DE '';+A+A66&&I"4!A!A !3!A!A =="&,,"F"F  +D++[2268 D **;+<+<=    22; KMAz  ( (  + +K <  %< Gdii+=>-!T1a> D 2FF9= !00JK4J4J  2 G G  ,+++3E"".Q;$"")+%): =%(>04-!%!C!C)"J"8I)JJ04-)00< =)0 GG6HHI-1)$5Q#7#H#HDH"&n!5=N8O!O#44$, 5   --... $     )&$,, 234BFJLKyyT\\<<7?DJJT ++&304,  ++#(? % %D#):LL889;M&#<<$77tC%62C-.&7#*&& 0 0  +=*M*M D)- +/9*+&1eQ) %$% GG6MMN 0II ,0( GG6NNO& $yy),56H,I) H)+/))4 1::L0M 4++3"?"34$$=#>?&&.Z0//D,1(i(A'B!DDD):$)'@'+9*(3D#<<$77tC%62C-.(=&7)=)*&0)$=#>a@@  * * 6!-//"35" "000 D$B$B C** *D 99T\\<<3;C OM''"/,0(   r s?0"^s;]]%;], cy)z3Provide a hook for MySQL to add LIMIT to the UPDATENr )r update_stmts r update_limit_clausezSQLCompiler.update_limit_clauseKr cy)z3Provide a hook for MySQL to add LIMIT to the DELETENr )r delete_stmts r delete_limit_clausezSQLCompiler.delete_limit_clauseOrr c 6d|d<|j|fddi|S)z|Provide a hook to override the initial table clause in an UPDATE statement. MySQL overrides this. Trbrr)rr from_table extra_fromsrs r update_tables_clausez SQLCompiler.update_tables_clauseSs*8 ,z,,TE$E"EEr c 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 r update_from_clausezSQLCompiler.update_from_clause]s" %  r c |j||fi|}trt|tsJ|j}|||d<d}n |j }|r-d|_|js||_|js||_|jtzr1tit}|jtz}|r ||_nd}d}|j}t!|} | rDtt#|j$} |D cgc] } | | vs|  } } | j'|} ng} |j$h} |j j)| | |dd}|j*r!||j,||j*fi|z }|j.||j$| fd|i|}t1j2||||fi|}|j4}|j6r|j9||\}}nd}|j:r|j=||||z }|dz }|dj?d tAd |Dz }|jBs |jDr>|jFr2|d |jI||jBxs |jD| zz }|r,|jJ||j$| |fd|i|}|r|d |zz }|jLr)|jN|jLfd|i|}|r|d |zz }|jQ|}|r|d |zz }|jBs |jDr>|jFs2|d |jI||jBxs |jD| zz }|jRr.|stU|j nd}|jW||z}|r|J|jYd|j j[d|Scc} w)NrZFTrzUPDATE rz SET rc36K|]\}}}}|dz|zyw)=Nr )r9r$r rs r r;z+SQLCompiler.visit_update..s) !4 3J  szList[Tuple[Any, str, str, Any]]r,r WHERE rUPDATErr).rXrrrAr/rr2rr%rhrvrzr~rwr _extra_fromsr&r*rrrrlrkrrrrrrIrrrrr7rr;r,rrrrrUrrrr)rrrZrr%rrr r is_multitable main_fromsr render_extra_fromsr!rrGr crud_paramsrHextra_from_textrrgrs r  visit_updatezSQLCompiler.visit_updateksb ; ::  !#  m^< <<#--  #!-B~ H::~H  DM)))6&%%%2" <<4 4$R/K<<,6L#. K L#00 [) ];+<+<=>J&"!:*=" ")..{;O!# *001O #2 /)    +D++[2268 D/T..      $    "22 +}h :< )66   (,(>(>Z) %M:!M  ( (  + +K <     %)1;&     " "k&<&<--d33++E{/E/E(04 5d55!!"  (   Oo--  & &111++9DHJA A %// <  C,& &D  # #{'='=00 C$//''A;+A+A$,0 D 993;C OM***G$ND * **   x  0 r S"s  O Oc td)zProvide a hook to override the generation of an DELETE..FROM clause. This can be used to implement DELETE..USING for example. MySQL and MSSQL override this. zCThis backend does not support multiple-table criteria within DELETErrrrrrrs r delete_extra_from_clausez$SQLCompiler.delete_extra_from_clauses" %  r c .|j|fddd|S)NT)rbrr)rrrrrs r delete_table_clausezSQLCompiler.delete_table_clauses,,z,,  d .0  r c |j||fi|}|j}|||d<d}n |j }|r-d|_|js||_|j s||_|j tzr1tit}|j tz}|r ||_ nd}d}|j}|jhj|} |jj| | |dd} |j r!| |j"||j fi|z } | dz } |j%||j||} t+j,||||fi||j.r|j1|| \} } nd} |j2r|j5||| | z } |j6s |j8r>|j:r2| d|j=||j6xs |j8| zz } |r,|j>||j|| fd |i|}|r| d|zz } |j@r)|jB|j@fd |i|}|r| d |zz } |jE|}|r| d|zz } |j6s |j8r>|j:s2| d|j=||j6xs |j8| zz } |jFr.|stI|jnd}|jK| | z} |r|J|jMd |jjOd| S#t&$r@|j%||j|} |r|j)|j|} YAwxYw)NrZFTrzDELETE FROM )rr,rrrrDELETErr)(rXr/rr0rr%rhrvrzr~rwrrrrrrlrkr TypeErrorrrrrrIrrr7rr;r,rrrrrUrrrr)rrrZrr%rrr rr!rrGr$rHrrrgrs r  visit_deletezSQLCompiler.visit_deletes: ::  !# $--  #!-B~ H::~H  DM)))6&%%%2" <<4 4$R/K<<,6L#. K L#00 &,,-33K@ #2 /)    +D++[2268 D  M11!!' 2J dKOBO   (,(>(>Z) %M:!M  ( (  + +K <   # #{'='=,, C$//''A;+A+A$,0 D ;d;;!!  (   Oo--  & &111++9DHJA A %// <  C,& &D  # #{'='=00 C$//''A;+A+A$,0 D 993;C OM***G$ND * **   x  0 r U M11[.. JLL!2!2 LL Ms+MAN  N c >d|jj|zS)Nz SAVEPOINT %srformat_savepointrsavepoint_stmtrs r visit_savepointzSQLCompiler.visit_savepoints > >~ NNNr c >d|jj|zS)NzROLLBACK TO SAVEPOINT %srrs r visit_rollback_to_savepointz'SQLCompiler.visit_rollback_to_savepoints#)DMM,J,J -   r c >d|jj|zS)NzRELEASE SAVEPOINT %srrs r visit_release_savepointz#SQLCompiler.visit_release_savepoints#% (F(F )   r )rrkr/rrrrfr3rgr&rhrtr|zOptional[SQLCompiler]rr)rrH)rr6)rzDict[Any, Any])rzMutableMapping[CTE, str])rzVMutableMapping[str, Union[_BindProcessorType[Any], Sequence[_BindProcessorType[Any]]]])rr6)NT)rrrr&rr.)NNTNTF)rrrrrr&r Optional[int]rr&rdr&rrjF)r0rjrer&rr.)rzCallable[[Any], str]r)NFFNr )NTr N)rColumnClause[Any]rOptional[_ResultMapAppender]rr&rrrz Optional[_AmbiguousTableNameMap]rrrrr)NF)r rKrrrr)r rLrrrr)r rIrrrr)r2 Function[Any]rrrrrr)r2rrrrr)FNNr )NFNN) rBinaryExpression[Any]r rrr&rrrr)rrr@rrrrr)FFFFF)rrrzsqltypes.TypeEngine[Any]rr)r@rrrCrr)rrrr)FFNNNN)rrrr&rr&rLrHrzOptional[TypeEngine[Any]]rMzOptional[Set[str]]rNrJrrrr)rWrXrbr&rpr&rqzOptional[_FromHintsType]rZ Optional[CTE]rzOptional[FromLinter]rRzselectable._CTEOptsrrrrH)FFFNFFNN)FNN) rrrrrrrrrr)NNNTFFT)rrYrrHrrH)FFNNNFN)rr*rzTuple[str, _FromHintsType])rr*rrrr rUr@r+zSequence[_ColumnsClauseElement]rr&rrrr)NFF)FFFNTNNN)rrSrrM)r/rr0rfrwz%List[_MutableCoreSingleExecuteParams]rdrWrxrIrKr&rrrz Iterator[_InsertManyValuesBatch]r|)rr?rZrrrrr)rrrr  EXTRACT_MAPr7r&rr-r rCOMPOUND_KEYWORDSrYr0r1r2r4r5r7r8r;r<r=rArBrCrDrErFrGrIrKrLrM frozensetrNrOrrPr%postfetch_lastrowidrQr4rRrSrTr]r_rrpatternrrrr[rurrBrro_memoized_propertyrrrrmemoized_propertyrmemoized_instancemethodr contextlibcontextmanagerrrzryrrrrrrrr{preload_moduler'r,rGrPrRr]rcrfrwr}rrrrrrrrrrrrrrrrrrrr rrrr#r-r0r5r:r@r<rNrKrHrcr_rrrrzr}rrrrrrrrrrrrrrrrprqrrrrrrrrrrrrrrrrrrr rrrrr)rr-rrr!rrGrrr$_CTEOptsrfrrrrrrrrrrorrrrrrrrtypingrrrrrrrrrkrrrr\r]r r,rgrfr?rErIr, CLIENTSIDErarkSENTINEL_DEFAULTNONErhrirPrrgrNrVrrrrrrrrrrrrrr r r rrs K    ; :/.66 F)HdHdHd +*%.0O*/.0O*/$BF>EK ((I--6 %$4',t+5:+T9 "OT!B!!%(' .- &+d*"OT!"d! ).- !ND  !&%=A "9@+/-. 6:295929=A:A@OO.3- `.3+`!#"/b /;?".0EI 9O!9O89O 9O , 9O #C 9O9O 9OvA    4052h   "@L&&K ( T B   7;?,,8, , ,\8 C04?B3 -AC$L6"BB  4$ ;?H*TM1d 6p8     % %    2GG IIJA E BFA E BFA E BF    AE   + 7: BE   + 7: BE   + 7: BE  $" cJ$ $!% DB%%!9% %N &6 *$ #&*484815AAA A $ A 2 A 2A/AA AFC.2&*,0(; (;(;E(BV VV V , V $ V*V&VV Vp30 bH0?  "EI/b9(   !      4EI 8 " %OJb '4  $.-   1t11 - /L M  ,1:'+*KZ !! ! # !2h]~ %3j 7  1181 " 1  1 1@+0 'X!%3j < )"(:t'9'9 , 7 7,>> , = =,>> , 1 1,>> , 5 5,55 , 5 5,55 ($&$D#I#I , 1 1,:: $ << (<|YY-YC Y C Y  Y"&Y?Y *Yx AEpd F  "'+RR$R R Rh  AFO  r rceZdZdZdZej dfdZdZdZ dZ dZ dd Z d Z d Zd Zd ZdZdZdZdZxZS)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` cy)Nzr rs r rz$StrSQLCompiler._fallback_column_namesr zsqlalchemy.engine.urlc T|jdk7rtjj}|jj |jj }|j|d|}t|ts|j|fi|St|1||S)Nr)r|) stringify_dialectr&r# engine_urlURLr get_dialectstatement_compilerrrrrr)rrrrurlrcompilerrs r rz,StrSQLCompiler.visit_unsupported_compilations  $ $ 1..++CMcggnnW%>%>?KKMOG1142Hh7'x''6266w4WcBBr c ~|j|jfi|d|j|jfi|dS)Nr*r+)rrrrys r visit_getitem_binaryz#StrSQLCompiler.visit_getitem_binarys: DLL + + DLL , ,  r c *|j||fi|Srrrys r visit_json_getitem_op_binaryz+StrSQLCompiler.visit_json_getitem_op_binary(t((@R@@r c *|j||fi|Srrrys r !visit_json_path_getitem_op_binaryz0StrSQLCompiler.visit_json_path_getitem_op_binaryr r c @d|jj|dS)Nz)rformat_sequencerQs r rKzStrSQLCompiler.visit_sequences#$T]]%B%B8%L$MQ O r c tj|Dcgc]}|jd|ddi}}ddj|zScc}w)NTFr)r)rr*rr)rrUr+rrrrs r r,zStrSQLCompiler.returning_clausesZ++N;   % %dAtUB ?  dii000  sA c Pdd<ddjfd|DzS)NTrbrrc3HK|]}|jfdiywrqNrr9rrrrs r r;z4StrSQLCompiler.update_from_clause..s0#  !A  B Br B# rrrs` ``r rz!StrSQLCompiler.update_from_clauses38 #  #    r c Pdd<ddjfd|DzS)NTrbrc3HK|]}|jfdiywr)rr*s r r;z:StrSQLCompiler.delete_extra_from_clause..s0  !A  B Br B rrrs` ``r rz'StrSQLCompiler.delete_extra_from_clauses38 dii      r c y)NzSELECT 1 WHERE 1!=1r rs r rz#StrSQLCompiler.visit_empty_set_exprs$r c d|zS)Nz[%s]r rs r rz!StrSQLCompiler.get_from_hint_texts }r c *|j|dfi|S)Nz rrys r rz+StrSQLCompiler.visit_regexp_match_op_binarys,t,,V\HRHHr c *|j|dfi|S)Nz r0rys r rz/StrSQLCompiler.visit_not_regexp_match_op_binarys,t,,V5ELLLr c d|jj|fi|d|jj|fi|dS)Nz(rr')rrrrys r rz-StrSQLCompiler.visit_regexp_replace_op_binarys> *FKK * *4 62 6 +FLL + +D 7B 7  r c d|jj|fi|d|jj|fi|dS)Nz TRY_CAST(rr')rrr)rrrs r visit_try_castzStrSQLCompiler.visit_try_cast s> *DKK * *4 :6 : .DOO . .t >v >  r r)rrrr rr&r rrrr"rKr,rrrrrrrr4rrs@r rrs& T01 C2 C AA 1 18 1 " 1  1  1  %IM  r rc eZdZdZer d2 d3dZejd4dZejdZ d5 d6dZ dZ dZ d Zd Zd7d Z d8d Zd ZdZd9dZ d:dZdZ d7 d;dZdZdZdZdZdZdZdZdZd8dZ dZ!dZ"dZ#dZ$d Z%dd&Z+d'Z,d(Z- d?d)Z. d?d*Z/ d@d+Z0 d@d,Z1 d@d-Z2dAd.Z3d/Z4d0Z5d1Z6y)B DDLCompilerTcyrr rs r rzDDLCompiler.__init__s r cf|jj|jd|jS)NrX)rrrr>s r rzDDLCompiler.sql_compiler"s/||.. LL$T5N5N/  r c.|jjSr)rrr>s r  type_compilerzDDLCompiler.type_compiler(s||222r Ncyrr rs r rzDDLCompiler.construct_params,s r c |j}t|jtjr|j }|j }|j|j}t|dk(r|dd}}n |d|d}}|jd||jd||jd|j|j|jj|j|zS)Nrrrrrr#r<)contextrtargetr#rSrSrformat_table_seqrrrrrr/)rddlrr=rpathrschs r  visit_ddlzDDLCompiler.visit_ddl4s++ cjj&,, /llnG}}H,,SZZ8D4yA~!!Wbs!"XtAws   w .   x -   z8+@+@+L M  223==73JKKr c xd}|jr|dz }||jj|jzS)NzCREATE SCHEMA IF NOT EXISTS ) if_not_existsr format_schemar)rrrrs r visit_create_schemazDDLCompiler.visit_create_schemaGs9    $ $Ddmm11&..AAAr c d}|jr|dz }||jj|jz }|jr|dz }|S)Nz DROP SCHEMA IF EXISTS  CASCADE) if_existsrrGrcascaderdroprrs r visit_drop_schemazDDLCompiler.visit_drop_schemaMsK >> L D  ++DLL99 << J D r c ,|j}|j}d}|jr!|dj|jdzz }|dz }|jr|dz }||j |dzz }|j |}|r||dzz }|dz }d}d}|jD]P} | j} |j| | jxr| } | ||z }d }|d | zz }| jrd }R|j||j } | r ||d z| zz }|d|j#|zz }|S#tj$rE} tjd |jd | jd| jd| d} ~ wwxYw)Nz CREATE r,zTABLE rEr& Ffirst_pkr Tz (in table 'z ', column 'z'): r) _include_foreign_key_constraintsz )%s )rrrlrrFrcreate_table_suffixrrr?r2r descriptionrargscreate_table_constraintsinclude_foreign_key_constraintspost_create_table)rrrrrrrWrrT create_columnr processedceconsts r visit_create_tablezDDLCompiler.visit_create_tableVs== ?? CHHU__-3 3D     $ $D %%e,s22"66u=  '#- -D   #^^ M"**F  LL!F,>,>,Ox<) (I%D &ID9,,D%%#H $-- -3-S-S.   I$u, ,D d44U;;; ## &&((&++rwwqzC s5AD;;FAFFc |j}|jryj||}djfd|jD}|r|d|zz }|S)NrSr,c3@K|]}j|ywr)rr9rrs r r;z2DDLCompiler.visit_create_column..s )3DLL $ s)rsystemget_column_specificationr constraints)rrrTrrrr`s` r visit_create_columnzDDLCompiler.visit_create_columnsd ==,,Vh,G 7=7I7I    C%K D r c lg}|jr|j|j|j}||j|}n t }|j |j Dcgc]}||jur||vr|c}djdfd|DDScc}w)Nz, c3$K|]}|| ywrr )r9rs r r;z7DDLCompiler.create_table_constraints..s  }   rc3K|]I}|jr6jjr t|ddsj |Kyw) use_alterFN)_should_create_for_compilerrsupports_alterrBrrds r r;z7DDLCompiler.create_table_constraints..sI::4@ 33":{EB  Z(r)r?rforeign_key_constraintsrr~r_sorted_constraintsr)rrrVrrgall_fkcs omit_fkcsrs` r rZz$DDLCompiler.create_table_constraintss       u00 100 + 7 ++,LMII22 E---!92D  }}  "-    s.B1c xd}|jr|dz }||jj|jzS)Nz DROP TABLE rJ)rLrrrrNs r visit_drop_tablezDDLCompiler.visit_drop_tables6 >> L Ddmm00>>>r c Rd|jj|jzS)Nz DROP VIEW rrrrrOrs r visit_drop_viewzDDLCompiler.visit_drop_views  : :4<< HHHr c`|j"tjd|jzy)Nz,Index '%s' is not associated with any table.)rr2rr)rr~s r _verify_index_tablezDDLCompiler._verify_index_tables0 ;; "">K  r c |j}j|j}d}|jr|dz }|jt j d|dz }|jr|dz }|j||d|j|j|d d jfd |jDd z }|S) NzCREATE UNIQUE z0CREATE INDEX requires that the index have a namezINDEX rEinclude_schemarAr=rrc3ZK|]"}jj|dd$yw)FTrrN)rr)r9r rs r r;z1DDLCompiler.visit_create_index..s8!!))T*rar') rrzrrrr2rrF_prepared_index_namerrr expressions)rrr~include_table_schemarr~rrs` r visit_create_indexzDDLCompiler.visit_create_indexs   '== << I D :: ""B      $ $D  % %eN % K  ! ! (< "  II"--     r c |j}|jtjdd}|jr|dz }||j |dzS)Nz.DROP INDEX requires that the index have a namez DROP INDEX rJTr})rrr2rrLr)rrOrr~rs r visit_drop_indexzDDLCompiler.visit_drop_indexs^  :: ""@  >> L Dd//d/KKKr c|j&|jj|j}nd}|r|r|jj|}nd}|jj |}|r|dz|z}|SNr))rrrr format_index)rr~r~r schema_name index_names r rz DDLCompiler._prepared_index_namesy ;; "#}}>>u{{K #  .--445EFKK--44U; $s*Z7Jr c d|jj|jjd|j |jS)N ALTER TABLE z ADD )rrrrrrrrs r visit_add_constraintz DDLCompiler.visit_add_constraint s8 MM & &v~~';'; < LL (  r c d|jj|jd|jj |jj t jS)NzCOMMENT ON TABLE r)rrrrrcommentr%Stringrs r visit_set_table_commentz#DDLCompiler.visit_set_table_commentsL MM & &v~~ 6    2 2&&(9   r c Rd|jj|jzS)NzCOMMENT ON TABLE %s IS NULLrvrws r visit_drop_table_commentz$DDLCompiler.visit_drop_table_comments',t}}/I/I LL0   r c d|jj|jddd|jj |jj t jS)NzCOMMENT ON COLUMN T) use_tabler=r)r format_columnrrrrr%rrs r visit_set_column_commentz$DDLCompiler.visit_set_column_commentsZ MM ' '$4 (     2 2&&(9    r c Vd|jj|jdzS)NzCOMMENT ON COLUMN %s IS NULLT)r)rrrrws r visit_drop_column_commentz%DDLCompiler.visit_drop_column_comment)s/- 0K0K LLD1L1   r c @tj|t|rrrs r visit_set_constraint_commentz(DDLCompiler.visit_set_constraint_comment.s--dDLAAr c @tj|t|rrrws r visit_drop_constraint_commentz)DDLCompiler.visit_drop_constraint_comment1s--dDJ??r cg}|j|jd|jz|j|jd|jz|j|jd|jz|j|jd|jz|j |jd|j |jd|j|jd|jz|j|j|jrdnd d j|S) NzINCREMENT BY %dz START WITH %dz MINVALUE %dz MAXVALUE %dz NO MINVALUEz NO MAXVALUEzCACHE %dCYCLEzNO CYCLEr,) incrementrrminvaluemaxvalue nominvalue nomaxvaluecachecycler)ridentity_optionsrs r get_identity_optionsz DDLCompiler.get_identity_options4s  % % 1 KK),<,F,FF G  ! ! - KK*:*@*@@ A  $ $ 0 KK (8(A(AA B  $ $ 0 KK (8(A(AA B  & & 2 KK &  & & 2 KK &  ! ! - KK %5%;%;; <  ! ! - KK#3#9#9z Jxx~r c d}|jr|dz }||jj|jz }|r||z }|j |j}|r|d|zz }|S)NzCREATE SEQUENCE rEr,)rFrr%rr)rrrrroptionss r visit_create_sequencez!DDLCompiler.visit_create_sequenceHsn!    $ $D  --fnn==  FND++FNN;  C'M !D r c xd}|jr|dz }||jj|jzS)NzDROP SEQUENCE rJ)rLrr%rrNs r visit_drop_sequencezDDLCompiler.visit_drop_sequenceUs6 >> L Ddmm33DLLAAAr c d|j}|j|jj|}nd}|"t j d|jzd|jj |jjd|jrdnd||jrdSdS)Nz99 t0088   e4 9    44Z@@ r c d}|j%|jj|}||d|zz }|d|jj |j ddzz }||j |z }|Srrrs r rz)DDLCompiler.visit_column_check_constraintrr c Bt|dk(ryd}|j%jj|}||d|zz }|dz }|ddj fd|j r |j n |jDzz }|j|z }|S)Nrrrz PRIMARY KEY rrc3hK|])}jj|j+ywrrrrr9rrs r r;z;DDLCompiler.visit_primary_key_constraint..s,#  MM   '# /2) rrrrr_implicit_generatedcolumns_autoinc_firstrrrs` r visit_primary_key_constraintz(DDLCompiler.visit_primary_key_constraints z?a  ?? &!]]<99  # 1100'' #     44Z@@ r c |jd}|j%|jj|}||d|zz }t|jdj j }|ddjfd|jDd|j||ddjfd |jDd z }||j|z }||j|z }||j|z }|S) Nrrrz FOREIGN KEY(rc3hK|])}j|jj+ywr)rparentrr9r rs r r;z;DDLCompiler.visit_foreign_key_constraint..'23qxx}}-rz ) REFERENCES rc3hK|])}j|jj+ywr)rrrrs r r;z;DDLCompiler.visit_foreign_key_constraint..rrr') rrrrrrrrdefine_constraint_remote_tabledefine_constraint_matchdefine_constraint_cascadesr)rrrrr remote_tablers @r visit_foreign_key_constraintz(DDLCompiler.visit_foreign_key_constraints== ?? &!]]<99J//03::@@  II7A7J7J   / /L(  II7A7J7J    ,,Z88 // ;; 44Z@@ r c$|j|S)z=Format the remote table clause of a CREATE CONSTRAINT clause.)r)rrrrs r rz*DDLCompiler.define_constraint_remote_tables$$U++r c t|dk(ryd}|j%jj|}||d|zz }|dj|fi|ddj fd|Ddz }|j |z }|S) Nrrrr|r&rc3hK|])}jj|j+ywrrrs r r;z6DDLCompiler.visit_unique_constraint..s$Fadmm))!&&1Frr')rrrr!define_unique_constraint_distinctrrrs` r visit_unique_constraintz#DDLCompiler.visit_unique_constraints z?a  ?? &!]]<99 2D 2 2: D D IIF:F F   44Z@@ r c yrr rs r rz-DDLCompiler.define_unique_constraint_distinctsr cd}|j||j|z }|j||j|z }|Sr)ondelete"define_constraint_ondelete_cascadeonupdate"define_constraint_onupdate_cascaderrrs r rz&DDLCompiler.define_constraint_cascadessP    * D;;JG GD    * D;;JG GD r c\d|jj|jtzS)Nz ON DELETE %s)rvalidate_sql_phraser FK_ON_DELETErrs r rz.DDLCompiler.define_constraint_ondelete_cascade-!B!B   "   r c\d|jj|jtzS)Nz ON UPDATE %s)rrr FK_ON_UPDATErs r rz.DDLCompiler.define_constraint_onupdate_cascaderr cd}|j|jr|dz }n|dz }|j0|d|jj|jtzz }|S)Nrz DEFERRABLEz NOT DEFERRABLEz INITIALLY %s)rrrr FK_INITIALLYrs r rz+DDLCompiler.define_constraint_deferrabilitysq  ,$$ %))    + Odmm&G&G$$l' D r cFd}|j|d|jzz }|S)Nrz MATCH %s)rrs r rz#DDLCompiler.define_constraint_match*s-    ' K*"2"22 2D r c d|jj|jddz}|jdur|dz }|S|jdur|dz }|S)NzGENERATED ALWAYS AS (%s)FTrz STOREDz VIRTUAL)rrrY persisted)r generatedrrs r visit_computed_columnz!DDLCompiler.visit_computed_column0sr)D,=,=,E,E   U$-F-     $ & I D  E ) J D r c dd|jrdndd}|j|}|r|d|zz }|S)Nz GENERATED ALWAYSz BY DEFAULTz AS IDENTITYr)alwaysr)rrrrrs r visit_identity_columnz!DDLCompiler.visit_identity_column:s@ H\ 9 ++H5  Gg% %D r )...) rrkr/r=rrrr&rrrrrrr)r~rQrr)FT)r~rQr~r&rr)rz Column[Any]rrH)rzUnion[Visitable, str]rr)rrRrrrr)rrTrrrr)rrPrr)rrOrr)7rrrrrrr&rrrr:rrCrHrPrarhrZrtrxrzrrrrrrrrrrrrrrrfrWr\rrrrrrrrrrrrrrrrrr r r r6r6s; F FI,/03   , #C   &*   .      33 6:GK! 2E  3 L&B 2h  7;# J? IBF@ L49,0 $     B@( B  &6 J;  .69 ,0, *25 "*25  .    .   .    r r6ceZdZd1dZd2dZ d3dZd4dZd5dZd6dZd7dZ d8dZ d9d Z d:d Z d;d Z ddZd?dZ d@dZdAdZdBdZdCdZdDdZd?dZdEdZdFdZdGdZdHdZdIdZdEdZ dFdZdIdZd=dZ d;dZ!dr=rrs r  visit_CHARzGenericTypeCompiler.visit_CHAR'' eooNNr c P|jd|j|jS)NNCHARrArs r  visit_NCHARzGenericTypeCompiler.visit_NCHARs''uOOr c P|jd|j|jS)NVARCHARrArs r  visit_VARCHARz!GenericTypeCompiler.visit_VARCHARs$'' u||U__  r c P|jd|j|jS)NNVARCHARrArs r visit_NVARCHARz"GenericTypeCompiler.visit_NVARCHARs$''  eoo  r c P|jd|j|jS)NTEXTrArs r  visit_TEXTzGenericTypeCompiler.visit_TEXTrCr c y)NUUIDr rs r  visit_UUIDzGenericTypeCompiler.visit_UUIDrr c y)NBLOBr rs r  visit_BLOBzGenericTypeCompiler.visit_BLOBrr c Jd|jxrd|jzxsdzS)NBINARY(%d)rr=rs r  visit_BINARYz GenericTypeCompiler.visit_BINARYs$5<<AFU\\,AGRHHr c Jd|jxrd|jzxsdzS)N VARBINARYrXrrYrs r visit_VARBINARYz#GenericTypeCompiler.visit_VARBINARYs$ellDv /DJKKr c y)NBOOLEANr rs r  visit_BOOLEANz!GenericTypeCompiler.visit_BOOLEANr"r c |jr|jjs|jdddS|j|fi|S)Nr@ )r=r) native_uuidrsupports_native_uuidr>rRrs r  visit_uuidzGenericTypeCompiler.visit_uuidsE   (I(I++F2+N N"4??5/B/ /r c (|j|fi|Sr)rUrs r visit_large_binaryz&GenericTypeCompiler.visit_large_binarytu+++r c (|j|fi|Sr)r`rs r  visit_booleanz!GenericTypeCompiler.visit_boolean!t!!%.2..r c (|j|fi|Sr)r5rs r  visit_timezGenericTypeCompiler.visit_timetu+++r c (|j|fi|Sr)r/rs r visit_datetimez"GenericTypeCompiler.visit_datetimes"t""5/B//r c (|j|fi|Sr)r2rs r  visit_datezGenericTypeCompiler.visit_daternr c (|j|fi|Sr)r)rs r visit_big_integerz%GenericTypeCompiler.visit_big_integer t  -"--r c (|j|fi|Sr)r%rs r visit_small_integerz'GenericTypeCompiler.visit_small_integers#t""5/B//r c (|j|fi|Sr)r!rs r  visit_integerz!GenericTypeCompiler.visit_integerrkr c (|j|fi|Sr)rrs r  visit_realzGenericTypeCompiler.visit_realrnr c (|j|fi|Sr)r rs r  visit_floatzGenericTypeCompiler.visit_floatst,,,r c (|j|fi|Sr)rrs r  visit_doublez GenericTypeCompiler.visit_doublerur c (|j|fi|Sr)rrs r  visit_numericz!GenericTypeCompiler.visit_numericrkr c (|j|fi|SrrIrs r  visit_stringz GenericTypeCompiler.visit_stringrkr c (|j|fi|Srrrs r  visit_unicodez!GenericTypeCompiler.visit_unicoderkr c (|j|fi|SrrOrs r  visit_textzGenericTypeCompiler.visit_textrnr c (|j|fi|Srrrs r visit_unicode_textz&GenericTypeCompiler.visit_unicode_textrhr c (|j|fi|Srrrs r  visit_enumzGenericTypeCompiler.visit_enumrkr c 2tjd|z)NzKCan't generate DDL for %r; did you forget to specify a type on this Column?rrs r rzGenericTypeCompiler.visit_nulls" #%* +  r c Z|j|j|jfi|Sr)r type_enginerrs r visit_type_decoratorz(GenericTypeCompiler.visit_type_decorators)t||E--dll;BrBBr c &|jdi|Sr) get_col_specrs r visit_user_definedz&GenericTypeCompiler.visit_user_defineds"u!!'B''r N)rzsqltypes.Float[Any]rrrr)rzsqltypes.Double[Any]rrrr)rzsqltypes.DOUBLE_PRECISION[Any]rrrr)rzsqltypes.REAL[Any]rrrr)rzsqltypes.Numeric[Any]rrrr)rzsqltypes.DECIMAL[Any]rrrr)rzsqltypes.Integerrrrr)rzsqltypes.SmallIntegerrrrr)rzsqltypes.BigIntegerrrrr)rzsqltypes.TIMESTAMPrrrr)rzsqltypes.DateTimerrrr)rz sqltypes.Daterrrr)rz sqltypes.Timerrrr)rz sqltypes.CLOBrrrr)rz sqltypes.Textrrrr)rrr=rrrHrr)rz sqltypes.CHARrrrr)rzsqltypes.NCHARrrrr)rzsqltypes.Stringrrrr)rzsqltypes.NVARCHARrrrr)rzsqltypes.Uuid[Any]rrrr)rzsqltypes.LargeBinaryrrrr)rzsqltypes.BINARYrrrr)rzsqltypes.VARBINARYrrrr)rzsqltypes.Booleanrrrr)rzsqltypes.Unicoderrrr)rzsqltypes.UnicodeTextrrrr)rz sqltypes.Enumrrrr)rzTypeDecorator[Any]rrrr)rzUserDefinedType[Any]rrrr)2rrrr rrrrrr!r%r)r,r/r2r5r8r;r>rBrFrIrLrOrRrUrZr]r`rergrjrmrprrrtrwryr{r}rrrrrrrrrrr r r rrDs"3";>" "   !.;H OP  OIL0 ,),14, , /,0,.0*0250 0 /,-.///,,),14, , / C'C/2C C ()(14( (r rc*eZdZdZdZdZdZdZy)StrSQLTypeCompilerc r |j}||fi|S#t$r|j|fi|cYSwxYwr)rAttributeError_visit_unknown)rrrrs r rzStrSQLTypeCompiler.processsN 2!&!9!9 &d1b1 1 4&4&&u33 3 4s 66cR|jdr |jSt|)Nri)rkrr)rr:s r  __getattr__zStrSQLTypeCompiler.__getattr__ s% >>( #&& & % %r c |jj|jjjk(r|jjSt|Sr)rrupperreprrs r rz!StrSQLTypeCompiler._visit_unknownsA ?? # #u'?'?'E'E'G G??++ +; r c yrr rs r rzStrSQLTypeCompiler.visit_nullrr c ` |j}|di|S#t$rt|cYSwxYwr)rrr)rrrrs r rz%StrSQLTypeCompiler.visit_user_defineds= & --L %"% % ;  s --N)rrrrrrrrr r r rrs2&  &r rceZdZddZy)_SchemaForObjectCallablecyrr )r_SchemaForObjectCallable__objs r rz!_SchemaForObjectCallable.__call__#r N)rrrrrr r r rr"s.r rceZdZddZy)r(cyrr )rrs r rz _BindNameForColProtocol.__call__'rr N)rrrrrr r r r(r(&s:r r(cheZdZUdZeZeZeZ de d<de d<de d<e jdZ de d < d Zd e d < d+ d,dZdZ d-dZd.dZd.dZdZd.dZd/dZdZd0d1dZd0d2dZdZ d3 d4dZ d0 d5dZ d0 d6dZd0dZej@d d3 d7dZ! d3 d8d Z" d3 d8d!Z# d9d"Z$d:d#Z% d; dd'Z)d3d(Z*ejVd)Z,d?d*Z-y )@rz@Handle quoting and case-folding of identifiers based on options.r initial_quote final_quotezMutableMapping[str, str]_stringsr#rrFr&_includes_none_schema_translateNc||_||_|xs |j|_||_|jdz|_||_||_i|_|jjdv|_ y)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. r1)rrN) rrr escape_quoteescape_to_quote omit_schemaquote_case_sensitive_collationsrrjr)rrrrrrrs r rzIdentifierPreparer.__init__Fst. *&<$*<*<(#0014&/N, $ 7 7< ! r c|jj|j}|jj|jd|vfd}||_|_|S)Nc|j}|jr:|r6| d|vsd|vrtjd|zt d|xsdzdS|jS)Nr*r+zJSquare bracket characters ([]) not supported in schema translate name '%s'z __[SCHEMA_%s]_noneFr)r#_use_schema_mapr2rr.)rr includes_nones r  symbol_getterz@IdentifierPreparer._with_schema_translate..symbol_getterpsw::D""(8M#t **8:>?##tw7uzz!r )r__new__rvrwrr)rrpreprrs @r rz)IdentifierPreparer._with_schema_translatejsX~~%%dnn5 T]]+ 44  ""//<, r c|dvr)jstjddd<fd}tjd||S)Nzschema translate map which previously did not have `None` present as a key now has `None` present; compiled statement may lack adequate placeholders. Please use consistent keys in successive schema_translate_map dictionaries.rc|jd}|vr|}n|dvrtjd|}|s-jj}|stj dj |S)Nr1)Nrzschema translate map which previously had `None` present as a key now no longer has it present; don't know how to apply schema for compiled statement. Please use consistent keys in successive schema_translate_map dictionaries.zLDialect has no default schema name; can't use None as dynamic schema target.)rr2r<rdefault_schema_namerr)rrrdrs r rz=IdentifierPreparer._render_schema_translates..replaces771:Dqy#$T7 ?*11=$( ##'<<#C#C '**=$$%56 6r z(__\[SCHEMA_([^\]]+)\]))rr2r<r]r)rr/rrrs` @r rz,IdentifierPreparer._render_schema_translatess\ ! 1977--94AgJ 72vv0'9EEr c|j|j|j}|jr|jdd}|S)zEscape an identifier. Subclasses should override this to provide database-dependent escaping behavior. r%r)rrrrrrs r _escape_identifierz%IdentifierPreparer._escape_identifiers> d//1E1EF  MM#t,E r cN|j|j|jS)zCanonicalize an escaped identifier. Subclasses should override this to provide database-dependent unescaping behavior that reverses _escape_identifier. )rrrrs r _unescape_identifierz'IdentifierPreparer._unescape_identifiers!}}T1143D3DEEr cx|7|j|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 zUnexpected SQL phrase: z (matching against r')rr2rr)rrr`s r rz&IdentifierPreparer.validate_sql_phrases=  syy'9""CKK) r cX|j|j|z|jzS)z~Quote an identifier. Subclasses should override this to provide database-dependent quoting behavior. )rrrrs r quote_identifierz#IdentifierPreparer.quote_identifiers3   %%e, -  r c|j}||jvxs?|d|jvxs,|jj t | xs||k7S)z5Return True if the given identifier requires quoting.r)rCreserved_wordsillegal_initial_characterslegal_charactersrr)rrlc_values r rnz#IdentifierPreparer._requires_quotessf;;= ++ + #Qx4::: #((..s5z:: #E!  r cL|jjt| S)zjReturn True if the given identifier requires quoting, but not taking case convention into account.)rrrrs r rFz1IdentifierPreparer._requires_quotes_illegal_charss"((..s5z:::r cV|tjdd|j|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`. zThe 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().0.9r)r&rr)rr#forces r rzIdentifierPreparer.quote_schemas5.    !  zz&!!r cR|tjddt|dd}|k||jvr|j|S|j |r|j ||j|<n||j|<|j|S|r|j |S|S)aConditionally quote an identifier. 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().rrr)r&rrBrrnr)rr]rs r rzIdentifierPreparer.quotes,    !  w- = %}}U++((/+/+@+@+GDMM%(+0DMM%(}}U++ ((/ /Lr c@|jr|j|S|Sr)rr)rcollation_names r rz#IdentifierPreparer.format_collationKs  / /::n- -! !r c|j|j}|j|}|js|r||j |dz|z}|Sr)rrrrr)rrLr=rrs r r%z"IdentifierPreparer.format_sequenceQs[zz(--(11(;   ,$$%56GF r c$|j|S)zPrepare a quoted schema name.rrFs r rGz IdentifierPreparer.format_schemaszz$r c~|+t|tjr|j|}|j |S)Prepare a quoted column name.)rrrCr=r)rrrps r r\z$IdentifierPreparer.format_label_names;  J (++% >>(+Dzz$r cv||j}|J|+t|tjr|j |}t |ddsF|r3|j |j||dz|j|zS|j|S|r$|j |j||dz|zS|S)rrF)r=rr)) rrrrCr=rBrrr)rrrr table_namer=rps r rz IdentifierPreparer.format_columns <;;D# ##  J (++% >>(+Dv|U3%% *&jj& 'zz$'' %% *&  r c|j|}|js(|r&|r$|j||j|dfS|j|dfS)z(Format table name and schema as a tuple.Fr)rrrr)rrr=rs r r?z#IdentifierPreparer.format_table_seqsj 11%8J3C!!"23!!%E!:  %%e%>@ @r cd|j|j|j|jfD\}}}tjd|||dz}|S)Nc3FK|]}tj|ywr)r]r^rs r r;z4IdentifierPreparer._r_identifiers..(s )  IIaL) s!zM(?:(?:%(initial)s((?:%(escaped)s|[^%(final)s])+)%(final)s|([^\.]+))(?=\.|$))+)initialfinalr)rrrr]r_)rrr escaped_finalrs r _r_identifiersz!IdentifierPreparer._r_identifiers&sp) ""  ''(8(89) %  JJ $"EmL M  r c|j}|j|Dcgc] \}}|xs| c}}Dcgc]}|j|c}Scc}}wcc}w)z:Unpack 'schema.table.column'-like strings into components.)rfindallr)r identifiersrar}rs r unformat_identifiersz'IdentifierPreparer.unformat_identifiers8s]   *+;)?@Aaf1f@   % %a (  @ s AA)rNrTF) rrkrrrrHrrrr&rr&)r/rrrlrr)rrrr)rrrr&r)r#rrrrr)r]rrrrr)T)rLzschema.Sequencer=r&rr)rz Label[Any]rrHrr)rzOptional[AliasedReturnsRows]rrHrr)rzUnion[Constraint, Index]rr&rrH)rrrr&rr)rrrrIrr&rr)r~rQrr)TN)rrYr=r&rrHrr)FNNFN)rzColumnElement[Any]rr&rrHrrHr=r&rpzOptional[Mapping[str, Any]]rr)rrrz Sequence[str]).rrrr RESERVED_WORDSrLEGAL_CHARACTERSrILLEGAL_INITIAL_CHARACTERSrr r@ attrgetterrrrrrrrrrrnrFrrrr%rrhrr&r rrrrrrrGr\rr?rrrr r r rr*sJ#N'!;&&2E(2E2Eh2O/O-2#T1 !%)04!" " " # "  " *. " " H0)F)F4J)F )FV F$   ; %"N2h"=A ' 59    8<..'4. . JN$1$9F$ $T01KO2DH 2415    )-    15    )-     $ $" $48 $  $ "   (   " "$( 04,",, , " ,  ,., ,\A" " r r)r  __future__rrcollections.abcabcrrenumrrqrr@r]timerr rrrr r r r r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r6_typingr'r(r)r*r+r,r-r.r/visitorsr0r2r3 util.typingr4r5r6r7 annotationr8r9r:r;rr<r@r=dmlr>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr[r\r]type_apir^r_r`rarb engine.cursorrcengine.interfacesrdrerfrgrhrirjrkrlr_FromHintsTyperr_Ir LEGAL_CHARACTERS_PLUS_SPACErurr rrrUNICODErrrlrmror_rJmulrmodnegltlenegtgeeqis_distinct_fromis_not_distinct_from concat_opr not_match_oprrr#rrr-r.rexists distinct_opinvany_opall_opdesc_opasc_opnulls_first_op nulls_last_opbitwise_xor_op bitwise_or_opbitwise_and_opbitwise_not_opbitwise_lshift_opbitwise_rshift_oprrrrrrrrrrrrcuberollup grouping_setsrr r_CompoundSelectKeywordr UNION_ALLr EXCEPT_ALLr INTERSECT_ALLrrrrrrrrr$r.rDrTrarortr=rurvrwrx namedtuplerzr EnsureKWArgrBinaryElementRoleCompilerColumnElementrrrrr6rrrr(r)rs0r r< s/"#)  ! &2!%!"# +," #)#**''&' #",,(1./&+'"','$)#4<:<=3=C+:lC'(_B2::.5(bjj):BDDA.3Arl;c!f;AA3%HrzzMM6?. @fA. BfC. FwG. HfI. JnK. L] e U e c  [.  b  N N !4 N  . h y N NNF NNF h _- )&       ""$( &%%++W%%//%%,,h%%00,%%//%%33_ > !*  Ji $1$:J:zt tnZ2!;!$ G  g.FK FB & l ?#''' w6HI?#DI'I'XF4##F0 C ("@"@2#  C ("@"@# LHV (HV Vll [l ^m(m`z(,z(z&,&B/x/;h;U U ia