
    Iit                       S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SKJ
r
  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SK J!r!  SSK"J#r#  SSK"J$r$  SSK"J%r%  SSK"J&r&  SSK"J'r'  SSK"J(r(  SS K"J)r)  SS!K"J*r*  SS"K"J+r+  SS#K,J-r-  SS$K,J.r.  S%S&K/J0r0  S%S'K1J2r2  S%S(K3J4r4  S%S)K3J5r5  S%S*K6J7r7  S%S+K6J8r8  S%S,K0J9r9  S%S-K:J;r;  \(       al  S S.KJ<r<  S S/KJ=r=  S S0KJ>r>  S S1K?J@r@  S S2KAJBrB  S S3KCJDrD  S S4KEJFrF  S S5KEJGrG  S S6KJHrH  S S7KJIrI  S S8KJJrJ  S S9KKJLrL  S S:KKJMrM  S S;KNJOrO  SS<K"JPrP  S%S=KQJRrR  S%S>KSJTrT  S%S?KUJVrV  \R                  " \X5      rY " S@ SA\.5      rZ " SB SC\%5      r[\;" \+SD5            SSSE j5       r\\;" \[SD5            STSF j5       r]\;" \&SD5            SUSG j5       r^\;" \*SD5          SVSH j5       r_\8R                  " SI5      \7R                  " SISJ5      \4R                  R                  SK5       " SL SM\4R                  5      5       5       5       rc\2R                  R                  \c5            SWSN j5       rf\2R                  R                  \5              SXSO j5       rhSYSP jri        SZSQ jrj      S[SR jrkg)\    )annotationsN)Any)cast)Dict)List)Optional)Sequence)Tuple)TYPE_CHECKING)Union)Column)literal_column)Numeric)text)types)BIGINT)ExcludeConstraint)INTEGER)CreateIndex)ColumnClause)
TextClause)FunctionElement)NULLTYPE   )alter_column)alter_table)AlterColumn)ColumnComment)format_column_name)format_table_name)format_type)IdentityColumnDefault)RenameTable)ComparisonResult)DefaultImpl   )util)render)ops)	schemaobj)BatchOperations)
Operations)sqla_compat)compiles)Literal)Index)UniqueConstraint)ARRAY)PGDDLCompiler)HSTORE)JSON)JSONB)ClauseElement)ColumnElement)quoted_name)MetaData)Table)
TypeEngine)_ServerDefault)AutogenContext)_f_name)MigrationContextc                  v  ^  \ rS rSrSrSr\R                  SS14-   rSS jrS r	S r
          S                           S U 4S	 jjjrS
 rS r\R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      \R                  " S5      4rS!S jr    S"S jr      S#S jr      S$S jr      S%S jrS&S jr  S'         S(U 4S jjjr      S)S jr      S*S jr      S+S jr      S,S jr      S-S jrSrU =r$ ).PostgresqlImplN   
postgresqlTFLOATzDOUBLE PRECISIONc                2   UR                   R                  SS 5      =(       d    SnU HQ  nXAR                  R                  ;  d  M  UR                  R	                  [        U[        R                  5      5        MS     U R                  [        U40 UD65        g )Npostgresql_include )
kwargsgettablecappend_columnr   sqltypesNullType_execr   )selfindexkwrG   cols        </venv/lib/python3.13/site-packages/alembic/ddl/postgresql.pycreate_indexPostgresqlImpl.create_indexU   ss     #\\--.BDIOR%C++--'))3 1 12 &
 	

;u++,    c                    UR                    H?  nUR                  c  M  UR                  UR                  ;   d  M.  U R                  U5        MA     g N)constraintsnamenamed_constraintsdrop_constraint)rQ   
batch_implrK   
constraints       rU   prep_table_for_batch#PostgresqlImpl.prep_table_for_batcha   s<    ++J+OOz'C'CC$$Z0 ,rX   c                   UR                   (       a  X"R                  R                  L a  gUnXS:H  nU(       a  gS UUUR                  4;   a  U(       + $ UR                  R                  n[        U[        5      (       aH  [        UR                  [        5      (       d  [        R                  " SSU5      nSU S3n[        U5      nU R                  nUc   eUR                  [        R                  " [        U5      U:H  5      5      (       + $ )NFz^'|'$ ')primary_keyrK   _autoincrement_columnserver_defaultarg
isinstancestrtyper   resubr   
connectionscalarr-   _select)	rQ   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaultconn_col_defaultdefaults_equalmetadata_defaultconns	            rU   compare_server_default%PostgresqlImpl.compare_server_defaulti   s    ''#8#8#N#NN5)F%**
 

 &%%*99==&,,.33W==#%66(B8H#I %&'7&8#: -.>? ;;/04DD
 
 	
rX   c                   > UR                  SS 5      nUb  Uc  [        R                  " S5      eUb  U R                  [	        UUUUUU	U
US95        [
        TU ]  " UU4UUUUUU	U
UUS.	UD6  g )Npostgresql_usingz6postgresql_using must be used with the type_ parameter)schemausingexisting_typeexisting_server_defaultexisting_nullable)	nullablerh   r\   r~   autoincrementr   r   r   existing_autoincrement)popr'   CommandErrorrP   PostgresqlColumnTypesuperr   )rQ   
table_namecolumn_namer   rh   r\   type_r~   r   r   r   r   r   rS   r   	__class__s                  rU   r   PostgresqlImpl.alter_column   s      )40##H  JJ$!"/,C&7	 		
 )''$;/#9	
 	
rX   c                   UR                  S5      (       a  [        US   [        [        45      (       a  [        R
                  " SUS   5      nU(       aw  [        R                  " U[        S5      UR                  S5      S9R                  5       nU(       a3  Uu  pgXsS   :X  a&  [        R                  SUUR                  U5        US	 g g g g g g )	Ndefaultrl   znextval\('(.+?)'::regclass\)a9  select c.relname, a.attname from pg_class as c join pg_depend d on d.objid=c.oid and d.classid='pg_class'::regclass and d.refclassid='pg_class'::regclass join pg_class t on t.oid=d.refobjid join pg_attribute a on a.attrelid=t.oid and a.attnum=d.refobjsubid where c.relkind='S' and c.oid=cast(:seqname as regclass)r   )seqnamer\   z^Detected sequence named '%s' as owned by integer column '%s(%s)', assuming SERIAL and omitting)rJ   rj   r   r   rm   matchr-   _exec_on_inspectorr   groupfirstloginfor\   )rQ   	inspectorrK   column_info	seq_matchr   r   colnames           rU   autogen_column_reflect%PostgresqlImpl.autogen_column_reflect   s    ??9%%*'6!2+
 +
 /Y1GI "55	; &OOA. %'   '+$Gf"55; $!JJ# (	2 6 # +
%rX   c                    U Vs1 s H'  nUR                   R                  S5      (       d  M%  UiM)     nnU H  nUR                  U5        M     [        R                  (       d  U R                  XB5        g g s  snf )Nduplicates_constraint)r   rJ   remover-   sqla_2_skip_functional_indexes)rQ   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexesrR   doubled_constraintsixs           rU   correct_for_autogen_constraints.PostgresqlImpl.correct_for_autogen_constraints   ss     &
%zz~~56 % 	 
 &B# & !!))*:I "
s
   $A7A7z( asc nulls last)$z(?<! desc)( nulls last)$z( asc)$z( asc) nulls first$z desc( nulls first)$c                r   UR                  5       R                  SS5      R                  SS5      nUR                  b7  UR                  UR                  R                  R                  5        S3S5      nSU;   a  [        R
                  " SSU5      nU(       a2  US   S:X  a)  US	   S
:X  a   USS	 nU(       a  US   S:X  a  US	   S
:X  a  M   U R                   H:  nUR                  U5      =n(       d  M  UR                  S5      u  pVUS U X&S  -   n  O   U(       a2  US   S:X  a)  US	   S
:X  a   USS	 nU(       a  US   S:X  a  US	   S
:X  a  M   [        R                  " S5      nUR                  U5      (       a*  UR                  SU5      n[        R
                  " SSU5      nUR                  SS5      nU$ )N"rd   re   .z::z(::[\w ]+\w)r   ()r   z	cast\s*\(zas\s+[^)]+\) )lowerreplacerK   r\   rm   rn   _default_modifiers_researchspancompiler   )rQ   rR   exprrsr   startendcast_res           rU   _cleanup_index_expr"PostgresqlImpl._cleanup_index_expr  s   zz|##C,44S"=;;"<<5;;#3#3#9#9#;"<A >CD4<66/2t4DtAw#~$r(c/":D tAw#~$r(c/
 ,,B		$'u'"ZZ]
FU|d4j0	 - tAw#~$r(c/":D tAw#~$r(c/ **\*==;;r4(D66/2t4D||C$rX   c                F    UR                   R                  S5      (       a  gg)Npostgresql_nulls_not_distinct)nulls_not_distinctrH   )dialect_kwargsrJ   )rQ   items     rU   _dialect_optionsPostgresqlImpl._dialect_options9  s"    
 ""#BCC*rX   c           
     b   / nU R                  X5      nU(       a  UR                  U5        UR                  nUR                  n[        U5      [        U5      :w  a)  UR                  S[        U5       S[        U5       35        U(       a  [        R
                  " U5      $ / n[        [        XV5      S5       H  u  nu  pU R                  U	5      nU R                  X5      nU R                  U
5      nU R                  X5      nX:X  a  MS  UR                  5       R                  S5      (       aS  SU;   d  SU;   aG  UR                  SU SU< S35        [        R                  " S	U SU< S
UR                  < S35        M  UR                  SU SU< SU< 35        M     U R                  U5      nU R                  U5      nUU:w  a  UR!                  SU SU 35        U(       a  [        R
                  " U5      $ U(       a  [        R"                  " U5      $ [        R$                  " 5       $ )Nzexpression number  to r   _opsr   r   zexpression #z' detected as including operator clause.zExpression #z
 in index a   detected to include an operator clause. Expression compare cannot proceed. Please move the operator clause to the ``postgresql_ops`` dict to enable proper compare of the index expressions: https://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#operator-classeszoptions )_compare_index_uniqueappendexpressionslenr$   	Different	enumeratezip_compile_elementr   stripendswithr'   warnr\   r   extendSkipEqual)rQ   metadata_indexreflected_indexmsg
unique_msgm_exprsr_exprsskipposm_er_e	m_compilem_text	r_compiler_text	m_options	r_optionss                    rU   compare_indexesPostgresqlImpl.compare_indexesB  s   
 //

 JJz" ,,!--w<3w<'JJ+CL>c'l^LM#--c22(W)>BOC#--c2I--nHF--c2I--nHF"++F33y C9$4"3%q 64 4 		"3%qZ&++. /ff 

\#a	}DNO5  C8 )).9	))/:		!JJ)D<=#--c22#((..#))++rX   c                   U R                  U5      nU R                  U5      nUR                  nUR                  nXe:w  a  [        R                  " SU SU 35      $ U R                  UR                  5      nU R                  UR                  5      nXx:w  a  [        R                  " SU SU 35      $ [        R                  " 5       $ )Nzexpression r   )_create_metadata_constraint_sig _create_reflected_constraint_sigunnamedr$   r   r   constr   )	rQ   metadata_constraintreflected_constraintmetadata_tupreflected_tupmeta_sigconn_sigmetadata_doconn_dos	            rU   compare_unique_constraint(PostgresqlImpl.compare_unique_constraint~  s    
 ;;
 == 
  '' ((#--hZtH:6  ++L,>,>?''(;(;<!#--gYd;-8   %%''rX   c                    UR                  S0 5      R                  5       nUR                  S5      (       d  UR                  SS 5        U$ )Ndialect_optionsrG   )rJ   copyr   )rQ   reflected_optionskindoptionss       rU    adjust_reflected_dialect_options/PostgresqlImpl.adjust_reflected_dialect_options  sD     $''(92>CCE{{/00KK,d3rX   c                ~    [        U[        5      (       a  U$ UR                  U R                  SSS.S9R                  $ )NTF)literal_bindsinclude_table)dialectcompile_kwargs)rj   rk   r   r  string)rQ   elements     rU   r   PostgresqlImpl._compile_element  s@    gs##NLL-1EJ  
 &	rX   c                   > U(       a%  [        U[        5      (       d  UR                  5       n[        TU ]  " U4X#S.UD6$ )zTRender a SQL expression that is typically a server default,
index expression, etc.

)is_server_defaultis_index)rj   r   
self_groupr   render_ddl_sql_expr)rQ   r   r	  r
  rS   r   s        rU   r  "PostgresqlImpl.render_ddl_sql_expr  sE      Jt\::??$Dw*
$5
LN
 	
rX   c                    [        U5      R                  nUR                  S5      (       d  g[        U SUR                  -  5      (       a!  [        U SUR                  -  5      nU" X5      $ g)Nzsqlalchemy.dialects.postgresqlFz_render_%s_type)rl   
__module__
startswithhasattr__visit_name__getattr)rQ   r   autogen_contextmodmeths        rU   render_typePostgresqlImpl.render_type  se     5k$$~~>??4*U-A-AABB4!2U5I5I!IJD//rX   c           	     N    [        [        [        R                  " XSS5      5      $ )N	text_typez(.+?\(.*text_type=)r   rk   r(   _render_type_w_subtyperQ   r   r  s      rU   _render_HSTORE_type"PostgresqlImpl._render_HSTORE_type  s*     ))5K
 	
rX   c           	     N    [        [        [        R                  " XSS5      5      $ )N	item_typez(.+?\()r  r  s      rU   _render_ARRAY_type!PostgresqlImpl._render_ARRAY_type  s)     ))Z
 	
rX   c           	     N    [        [        [        R                  " XSS5      5      $ Nastext_typez(.+?\(.*astext_type=)r  r  s      rU   _render_JSON_type PostgresqlImpl._render_JSON_type  *     ))7O
 	
rX   c           	     N    [        [        [        R                  " XSS5      5      $ r%  r  r  s      rU   _render_JSONB_type!PostgresqlImpl._render_JSONB_type  r)  rX   rH   )rR   r0   rS   r   returnNone)
NFNNNNNNNN)r   rk   r   rk   r   Optional[bool]rh   z%Union[_ServerDefault, Literal[False]]r\   Optional[str]r   Optional[TypeEngine]r~   r0  r   r/  r   r1  r   zOptional[_ServerDefault]r   r/  r   r/  rS   r   r-  r.  )rR   r0   r   rk   r-  rk   )r   zUnion[Index, UniqueConstraint]r-  zTuple[Any, ...])r   r0   r   r0   r-  r$   )r   r1   r   r1   r-  r$   )r   Dict[str, Any]r   rk   r-  r2  )r  zUnion[ClauseElement, str]r-  rk   )FF)
r   r7   r	  boolr
  r3  rS   r   r-  rk   )r   r<   r  r>   r-  zUnion[str, Literal[False]])r   r4   r  r>   r-  rk   )r   r2   r  r>   r-  rk   )r   r5   r  r>   r-  rk   )r   r6   r  r>   r-  rk   )__name__r  __qualname____firstlineno____dialect__transactional_ddlr%   type_synonymsrV   ra   rz   r   r   r   rm   r   r   r   r   r   r   r   r   r  r  r  r"  r'  r+  __static_attributes____classcell__r   s   @rU   rB   rB   N   s   K--	$%1 M
-1+
b $(@E"&* $(,.2<@,0152
2
 2
 !	2

 >2
 2
 $2
 2
 &2
 ,2
 ":2
 *2
 !/2
 2
 
2
 2
h%3NJ> 	

'(


-.


9


()


)* D2	:,:, :, 
	:,x(-( /( 
	(8!/7:	 #(	

  
 	

 
 

 
.2@	#

.<
	


-;
	


,:
	


-;
	
 
rX   rB   c                  <   ^  \ rS rSr        SU 4S jjrSrU =r$ )r   i  c                   > UR                  SS 5      n[        TU ]  " X40 UD6  [        R                  " U5      U l        XPl        g )Nr   )r   r   __init__rN   to_instancer   r   )rQ   r\   r   r   rS   r   r   s         rU   r?  PostgresqlColumnType.__init__  s>     w%1b1))%0

rX   )r   r   )r\   rk   r   rk   r   r<   r-  r.  )r4  r  r5  r6  r?  r:  r;  r<  s   @rU   r   r     s-    &)2<	 rX   r   rD   c                x    [        XR                  U R                  5      < S[        XR                  S 5      < 3$ )Nz RENAME TO )r   r   r~   r    new_table_namer  compilerrS   s      rU   visit_rename_tablerF    s2    
 	H00'..A($:$:DA rX   c           	         [        XR                  U R                  5      < S[        XR                  5      < SS[        XR                  5      -  < SU R                  (       a  SU R                  -  < 3$ S< 3$ )Nr   zTYPE %szUSING %srd   )r   r   r~   r   r   r!   r   r   rD  s      rU   visit_column_typerH    sh    
 	H00'..AX223K--88&-mm
W]]";	  :<;	 rX   c                   SnU R                   b9  UR                  R                  U R                   [        R                  " 5       5      OSnUR                  [        XR                  U R                  5      [        XR                  5      US9$ )Nz9COMMENT ON COLUMN {table_name}.{column_name} IS {comment}NULL)r   r   comment)rK  sql_compilerrender_literal_valuerN   Stringformatr    r   r~   r   r   )r  rE  rS   ddlrK  s        rU   visit_column_commentrQ    s     FC
 ??& 	22OOX__.	
   ::$(('..
 'x1D1DE   rX   c                \   [        XR                  U R                  5      < S[        XR                  5      < S3nU R
                  c  US-  nU$ U R                  c$  US-  nX1R                  U R
                  5      -  nU$ U R                  R                  U R
                  U R                  5      u  n  nU R
                  n[        U5       H\  nUS:X  a  USUR                  (       a  SOS-  -  nM&  USUR                  [        R                  " S	0 U[        Xg5      0D65      -  -  nM^     U$ )
Nr   zDROP IDENTITYzADD alwayszSET GENERATED %s ALWAYSz
BY DEFAULTzSET %s rH   )r   r   r~   r   r   r   r   visit_identity_columnimpl_compare_identity_defaultsortedrS  get_identity_optionsr-   Identityr  )r  rE  rS   r   diff_identityattrs           rU   rU  rU  .  s$   
 	H00'..AX223D 		(	(	0..w?? \\;;OOW<<

a ??4LDx+ (H\  	H$A$A((KD'(2I+JK%   ! rX   create_exclude_constraintbatch_create_exclude_constraintexclude_constraintc                      \ rS rSrSrSr   S             SS jjr\    SS j5       r S   SS jjr	\            SS j5       r
\          SS	 j5       rS
rg)CreateExcludeConstraintOpiQ  z0Represent a create exclude constraint operation.excludeNc                X    Xl         X l        X0l        X@l        XPl        X`l        Xpl        g rZ   )constraint_namer   elementswherer~   _orig_constraintrS   )rQ   rf  r   rg  rh  r~   ri  rS   s           rU   r?  "CreateExcludeConstraintOp.__init__[  s)      /$ 
 0rX   c                >   [         R                  " U5      nU " UR                  UR                  UR                   VVVs/ s H	  u  p4oSU4PM     snnn[	        SUR
                  5      UR                  UUR                  UR                  UR                  S9	$ s  snnnf )NzColumnElement[bool] | None)rh  r~   ri  
deferrable	initiallyr   )
r-   _table_for_constraintr\   _render_exprsr   rh  r~   rl  rm  r   )clsr`   constraint_tabler   r\   ops         rU   from_constraint)CreateExcludeConstraintOp.from_constraintp  s     '<<ZHOO!!1;1I1I1I~t2r
1I 3Z5E5EF#**'!,, **""
 	
s   Bc                   U R                   b  U R                   $ [        R                  " U5      nUR                  U R                  U R
                  S9n[        U R                  U R                  U R                  S.U R                  D6nUR                   H&  u  nnnUR                  [        U[        5      5        M(     UR                  U5        U$ )N)r~   )r\   rh  )ri  r*   SchemaObjectsrK   r   r~   r   rg  rf  rh  rS   ro  rM   r   r   append_constraint)rQ   migration_context
schema_objtexclr   r\   opers           rU   to_constraint'CreateExcludeConstraintOp.to_constraint  s       ,(((,,->?
T__T[[A ]]%%**
 gg	
 	
OOF423  	D!rX   c                8    U " X#U40 UD6nUR                  U5      $ )a  Issue an alter to create an EXCLUDE constraint using the
current migration context.

.. note::  This method is Postgresql specific, and additionally
   requires at least SQLAlchemy 1.0.

e.g.::

    from alembic import op

    op.create_exclude_constraint(
        "user_excl",
        "user",
        ("period", "&&"),
        ("group", "="),
        where=("group != 'some group'"),
    )

Note that the expressions work the same way as that of
the ``ExcludeConstraint`` object itself; if plain strings are
passed, quoting rules must be applied manually.

:param name: Name of the constraint.
:param table_name: String name of the source table.
:param elements: exclude conditions.
:param where: SQL expression or SQL string with optional WHERE
 clause.
:param deferrable: optional bool. If set, emit DEFERRABLE or
 NOT DEFERRABLE when issuing DDL for this constraint.
:param initially: optional string. If set, emit INITIALLY <value>
 when issuing DDL for this constraint.
:param schema: Optional schema name to operate within.

)invoke)rp  
operationsrf  r   rg  rS   rr  s          rU   r_  3CreateExcludeConstraintOp.create_exclude_constraint  s'    V h="=  $$rX   c                    UR                   R                  US'   U " X!R                   R                  U40 UD6nUR                  U5      $ )a  Issue a "create exclude constraint" instruction using the
current batch migration context.

.. note::  This method is Postgresql specific, and additionally
   requires at least SQLAlchemy 1.0.

.. seealso::

    :meth:`.Operations.create_exclude_constraint`

r~   )rV  r~   r   r  )rp  r  rf  rg  rS   rr  s         rU   r`  9CreateExcludeConstraintOp.batch_create_exclude_constraint  sC    & "--8//"<"<hM"M  $$rX   )ri  rf  rg  rS   r~   r   rh  )NNN)rf  zsqla_compat._ConstraintNamer   zUnion[str, quoted_name]rg  zIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]rh  z)Optional[Union[ColumnElement[bool], str]]r~   r0  ri  zOptional[ExcludeConstraint]r-  r.  )r`   r   r-  rc  rZ   )rx  zOptional[MigrationContext]r-  r   )r  r,   rf  rk   r   rk   rg  r   rS   r   r-  Optional[Table])
r  r+   rf  rk   rg  r   rS   r   r-  r  )r4  r  r5  r6  __doc__constraint_typer?  classmethodrs  r}  r_  r`  r:  rH   rX   rU   rc  rc  Q  s3    ;O <@ $8<4 ,
	 9  6 
* 
*
	"
 
& ?C!;	, +%+% +% 	+%
 +% +% 
+% +%Z %#% % 	%
 % 
% %rX   rc  c                4    [        UR                  5       U SS9$ )NT)alter)_exclude_constraintr}  )r  rr  s     rU   _add_exclude_constraintr    s     r//1?$OOrX   c                V    [         R                  " SX5      nUSLa  U$ [        XS5      $ )Nrd  F)r(   _user_defined_renderr  )r`   r  namespace_metadatarendereds       rU   !_render_inline_exclude_constraintr    s5     **:H uzEBBrX   c                D    U R                   nUb  UR                  S5        g)Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)importsadd)r  r  s     rU   _postgresql_autogenerate_prefixr    s#    %%G@ArX   c                  ^ ^^ / mTR                   nT R                  (       a&  TR                  S[        T R                  5      45        T R                  (       a&  TR                  S[        T R                  5      45        T R
                  (       a&  TR                  S[        T R
                  5      45        U(       d]  U(       aV  T R                  R                  (       a;  TR                  S[        R                  " T R                  R                  5      45        U(       dC  T R                  (       a2  TR                  S[        R                  " TT R                  5      45        UU U4S jnU(       a  [        [        R                  " TT R                  5      5      /nU(       d7  U[        [        R                  " T R                  R                  5      5      /-  nUR                  U" 5       5        S[        R                  " T5      SR                  U5      S	.-  $ U" 5       nS
[!        T5      SR                  U5      S	.-  $ )Nrl  rm  r   r~   r\   c            
     h  > TR                    V VVs/ s H  u  pnS[        U T5      < SU< S3PM     nnn nTR                  b3  UR                  S[        R
                  " TR                  T5      -  5        UR                  T VVs/ s H  u  pEU< SU< 3PM     snn5        U$ s  snnn f s  snnf )Nr   , r   zwhere=%s=)ro  _render_potential_columnrh  r   r(   _render_potential_exprr   )	sqltextr\   opstringargskvr  r`   optss	         rU   do_expr_where_opts/_exclude_constraint.<locals>.do_expr_where_opts  s     ,6+C+C

 ,D'x )#  ,D 	 

 'KK//$$o 	$7$$!1%$78'

$ 8s   "B'B.
z-%(prefix)screate_exclude_constraint(%(args)s)r  )prefixr  z%%(prefix)sExcludeConstraint(%(args)s))
_has_batchrl  r   rk   rm  r   rK   r~   r(   _identr\   _render_gen_namereprr   _alembic_autogenerate_prefixjoinr  )r`   r  r  	has_batchr  r  r  s   ``    @rU   r  r    s   
 FHD**I\3z'<'<#=>?[#j&:&:";<=Wc*"2"2345:#3#3#:#:Xv}}Z-=-=-D-DEFGZ__V,,_jooNO	
, ((*//JK
 T&--
(8(8(=(=>?@@D&()>99/JIIdOB
 
 	

 "#65oFIIdO:
 
 	
rX   c           	         [        U [        5      (       a<  U R                  (       a  SnOSnU[        R                  " U5      U R
                  S.-  $ [        R                  " U U[        U [        [        45      S9$ )Nz"%(prefix)sliteral_column(%(name)r)z%(prefix)scolumn(%(name)r))r  r\   )wrap_in_text)	rj   r   
is_literalr(   _sqlalchemy_autogenerate_prefixr\   r  r   r   )valuer  templates      rU   r  r  ;  su     %&&;H3H<<_MJJ
 
 	

 ,,#EJ+HI
 	
rX   )r  r#   rE  r3   r-  rk   )r  r   rE  r3   r-  rk   )r  r   rE  r3   r-  rk   )r  r"   rE  r3   )r  r>   rr  rc  r-  rk   )r`   r   r  r>   r  r:   r-  rk   )r  r>   r-  rk   )r`   r   r  r>   r  r3  r-  rk   )r  zGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]r  r>   r-  rk   )l
__future__r   loggingrm   typingr   r   r   r   r   r	   r
   r   r   
sqlalchemyr   r   r   r   r   rN   sqlalchemy.dialects.postgresqlr   r   r   sqlalchemy.schemar   sqlalchemy.sql.elementsr   r   sqlalchemy.sql.functionsr   sqlalchemy.typesr   baser   r   r   r   r   r    r!   r"   r#   rV  r$   r%   rd   r'   autogenerater(   r  r)   r*   operations.baser+   r,   r-   util.sqla_compatr.   r/   r0   r1   $sqlalchemy.dialects.postgresql.arrayr2   #sqlalchemy.dialects.postgresql.baser3   %sqlalchemy.dialects.postgresql.hstorer4   #sqlalchemy.dialects.postgresql.jsonr5   r6   r7   r8   r9   sqlalchemy.sql.schemar:   r;   sqlalchemy.sql.type_apir<   r=   autogenerate.apir>   autogenerate.renderr?   runtime.migrationr@   	getLoggerr4  r   rB   r   rF  rH  rQ  rU  register_operationAddConstraintOpregister_add_constraintrc  	renderersdispatch_forr  _constraint_renderersr  r  r  r  rH   rX   rU   <module>r     s   #  	            %   ( 1 < 2 ) 0 . 4 %     $ #  '  "   !  " - (  ' +:A<89553.+2$1-4 !g
[ g
T;  
+|$$1 % 

-!-: . 
-&&3 '* 

.".; /D :;##!B ,,-ABF% 3 3 F% C <
F%R 89P#P)BPP :P **+<=C!C#C !C 		C >C<
!<
#<
 <
 		<
~

 $	

 	
rX   