
    -jiv                       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%J.r.  SS&K/J0r0  SS'K/J1r1  S(S)K2J3r3  S(S*K4J5r5  S(S+K6J7r7  S(S,K6J8r8  S(S-K9J:r:  S(S.K9J;r;  S(S/K3J<r<  S(S0K=J>r>  \(       ar  S S1KJ?r?  S S2KJ@r@  S S3KJArA  S S4KBJCrC  S S5KDJErE  S S6KFJGrG  S S7KHJIrI  S S8KHJJrJ  S S9KJKrK  S S:KJLrL  S S;KJMrM  S S<KNJOrO  S S=KNJPrP  S S>KQJRrR  SS?K%JSrS  SS@K/JTrT  S(SAKUJVrV  S(SBKWJXrX  S(SCKYJZrZ  \R                  " \\5      r] " SD SE\15      r^ " SF SG\(5      r_\>" \.SH5            SWSI j5       r`\>" \_SH5            SXSJ j5       ra\>" \)SH5            SYSK j5       rb\>" \-SH5          SZSL j5       rc\;R                  " SM5      \:R                  " SMSN5      \7R                  R                  SO5       " SP SQ\7R                  5      5       5       5       rg\5R                  R                  \g5            S[SR j5       rj\5R                  R                  \5              S\SS j5       rlS]ST jrm        S^SU jrn      S_SV jrog)`    )annotationsN)Any)cast)Dict)List)Optional)Sequence)Tuple)TYPE_CHECKING)Union)Column)Float)Identity)literal_column)Numeric)select)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)_ServerDefaultType)_ReflectedConstraint)AutogenContext)_f_name)MigrationContextc                  x  ^  \ 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
S	S	S	S	S	S	S	S	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$ )0PostgresqlImplR   
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kwrK   cols        P/home/james-whalen/.local/lib/python3.13/site-packages/alembic/ddl/postgresql.pycreate_indexPostgresqlImpl.create_indexY   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)rU   
batch_implrO   
constraints       rY   prep_table_for_batch#PostgresqlImpl.prep_table_for_batche   s<    ++J+OOz'C'CC$$Z0 ,r\   c                z   UR                   (       a  X"R                  R                  L a  gUnU(       a.  [        R                  " SU5      (       a  UR                  SS5      nXS:H  nU(       a  gS UUUR                  4;   a  U(       + $ UR                  R                  n[        U[        5      (       aN  [        UR                  [        [        45      (       d  [        R                  " SSU5      nSU S3n[        U5      nU R                  nUc   eUR!                  [#        [        U5      U:H  5      5      (       + $ )NFnextval\('(.+?)'::regclass\)z
::regclass z^'|'$')primary_keyrO   _autoincrement_columnrematchreplaceserver_defaultarg
isinstancestrtyper   r   subr   
connectionscalarr   )	rU   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaultconn_col_defaultdefaults_equalmetadata_defaultconns	            rY   compare_server_default%PostgresqlImpl.compare_server_defaultm   s6    ''#8#8#N#NN5+-=!
 !
  077bI)F%**
 

 &%%*99==&,,.33gu5EFF#%66(B8H#I %&'7&8#: -.>?
 ;;>"237GGH
 
 	
r\   NF)
nullablerp   r`   type_schemaautoincrementexisting_typeexisting_server_defaultexisting_nullableexisting_autoincrementc       
           > 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)r   usingr   r   r   )	r   rp   r`   r   r   r   r   r   r   )popr*   CommandErrorrT   PostgresqlColumnTypesuperr   )rU   
table_namecolumn_namer   rp   r`   r   r   r   r   r   r   r   rW   r   	__class__s                  rY   r   PostgresqlImpl.alter_column   s    * )40##H  JJ$!"/,C&7	 		
 )''$;/#9	
 	
r\   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defaultrt   rh   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)rN   rr   r   r   rm   rn   r0   _exec_on_inspectorr   groupfirstloginfor`   )rU   	inspectorrO   column_info	seq_matchr   r   colnames           rY   autogen_column_reflect%PostgresqlImpl.autogen_column_reflect   s    ??9%%*'6!2+
 +
 /Y1GI "55	; &OOA. %'   '+$Gf"55; $!JJ# (	2 6 # +
%r\   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   rN   remover0   sqla_2_skip_functional_indexes)rU   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexesrV   doubled_constraintsixs           rY   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"ri   rj   .z::z(::[\w ]+\w)r   ()r   z	cast\s*\(zas\s+[^)]+\) )lowerro   rO   r`   rm   ru   _default_modifiers_researchspancompilern   )rU   rV   exprrsrn   startendcast_res           rY   _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$r\   c                F    UR                   R                  S5      (       a  gg)Npostgresql_nulls_not_distinct)nulls_not_distinctrL   )dialect_kwargsrN   )rU   items     rY   _dialect_optionsPostgresqlImpl._dialect_optionsH  s"    
 ""#BCC*r\   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)rU   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                    rY   compare_indexesPostgresqlImpl.compare_indexesQ  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#((..#))++r\   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   )	rU   metadata_constraintreflected_constraintmetadata_tupreflected_tupmeta_sigconn_sigmetadata_doconn_dos	            rY   compare_unique_constraint(PostgresqlImpl.compare_unique_constraint  s    
 ;;
 == 
  '' ((#--hZtH:6  ++L,>,>?''(;(;<!#--gYd;-8   %%''r\   c                    UR                  S0 5      R                  5       nUR                  S5      (       d  UR                  SS 5        U$ )Ndialect_optionsrK   )rN   copyr   )rU   reflected_objectkindoptionss       rY    adjust_reflected_dialect_options/PostgresqlImpl.adjust_reflected_dialect_options  sD     #&&'8"=BBD{{/00KK,d3r\   c                ~    [        U[        5      (       a  U$ UR                  U R                  SSS.S9R                  $ )NTF)literal_bindsinclude_table)dialectcompile_kwargs)rr   rs   r   r  string)rU   elements     rY   r   PostgresqlImpl._compile_element  s@    gs##NLL-1EJ  
 &	r\   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)rr   r   
self_groupr   render_ddl_sql_expr)rU   r   r  r  rW   r   s        rY   r  "PostgresqlImpl.render_ddl_sql_expr  sE      Jt\::??$Dw*
$5
LN
 	
r\   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)rt   
__module__
startswithhasattr__visit_name__getattr)rU   r   autogen_contextmodmeths        rY   render_typePostgresqlImpl.render_type  se     5k$$~~>??4*U-A-AABB4!2U5I5I!IJD//r\   c           	     N    [        [        [        R                  " XSS5      5      $ )N	text_typez(.+?\(.*text_type=)r   rs   r+   _render_type_w_subtyperU   r   r  s      rY   _render_HSTORE_type"PostgresqlImpl._render_HSTORE_type  s*     ))5K
 	
r\   c           	     N    [        [        [        R                  " XSS5      5      $ )N	item_typez(.+?\()r  r!  s      rY   _render_ARRAY_type!PostgresqlImpl._render_ARRAY_type  s)     ))Z
 	
r\   c           	     N    [        [        [        R                  " XSS5      5      $ Nastext_typez(.+?\(.*astext_type=)r  r!  s      rY   _render_JSON_type PostgresqlImpl._render_JSON_type  *     ))7O
 	
r\   c           	     N    [        [        [        R                  " XSS5      5      $ r)  r  r!  s      rY   _render_JSONB_type!PostgresqlImpl._render_JSONB_type  r-  r\   rL   )rV   r3   rW   r   returnNone)r   rs   r   rs   r   Optional[bool]rp   3Optional[Union[_ServerDefaultType, Literal[False]]]r`   Optional[str]r   Optional[TypeEngine]r   r5  r   r3  r   r6  r   r4  r   r3  r   r3  rW   r   r1  r2  )rV   r3   r   rs   r1  rs   )r   zUnion[Index, UniqueConstraint]r1  zTuple[Any, ...])r   r3   r   r3   r1  r'   )r   r4   r   r4   r1  r'   )r   rA   r   rs   r1  zDict[str, Any])r
  zUnion[ClauseElement, str]r1  rs   )FF)
r   r:   r  boolr  r7  rW   r   r1  rs   )r   r?   r  rB   r1  zUnion[str, Literal[False]])r   r7   r  rB   r1  rs   )r   r5   r  rB   r1  rs   )r   r8   r  rB   r1  rs   )r   r9   r  rB   r1  rs   )__name__r  __qualname____firstlineno____dialect__transactional_ddlr(   type_synonymsrZ   re   r   r   r   r   rm   r   r   r   r   r   r   r  r   r  r  r"  r&  r+  r/  __static_attributes____classcell__r   s   @rY   rF   rF   R   s   K--	$%1 M
-11
p $( "&* $(,.2 ,015%7
7
 7

 !7

7
 7
 $7
 7
 &7
 ,7
"
7
" *#7
$ !/%7
& '7
( 
)7
 7
r%3NJ> 	

'(


-.


9


()


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

 
 

 
.2@	#

.<
	


-;
	


,:
	


-;
	
 
r\   rF   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__rR   to_instancer   r   )rU   r`   r   r   rW   r   r   s         rY   rC  PostgresqlColumnType.__init__  s>     w%1b1))%0

r\   )r   r   )r`   rs   r   rs   r   r?   r1  r2  )r8  r  r9  r:  rC  r>  r?  r@  s   @rY   r   r     s-    &)2<	 r\   r   rH   c                x    [        XR                  U R                  5      < S[        XR                  S 5      < 3$ )Nz RENAME TO )r   r   r   r#   new_table_namer
  compilerrW   s      rY   visit_rename_tablerJ    s2    
 	H00'..A($:$:DA r\   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 %sri   )r   r   r   r   r   r$   r   r   rH  s      rY   visit_column_typerL    sh    
 	H00'..AX223K--88&-mm
W]]";	  :<;	 r\   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)rO  sql_compilerrender_literal_valuerR   Stringformatr#   r   r   r"   r   )r
  rI  rW   ddlrO  s        rY   visit_column_commentrU  '  s     FC
 ??& 	22OOX__.	
   ::$(('..
 'x1D1DE   r\   c                F   [        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       HQ  nUS:X  a  USUR                  (       a  SOS-  -  nM&  USUR                  [        S	0 U[        Xg5      0D65      -  -  nMS     U$ )
Nr   zDROP IDENTITYzADD alwayszSET GENERATED %s ALWAYSz
BY DEFAULTzSET %s rL   )r   r   r   r   r   r   r   visit_identity_columnimpl_compare_identity_defaultsortedrW  get_identity_optionsr   r  )r
  rI  rW   r   diff_identityattrs           rY   rY  rY  =  s   
 	H00'..AX223D 		(	(	0..w?? \\;;OOW<<

a ??4LDx+ (H\  	H$A$A?gh&=>?%   ! r\   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)CreateExcludeConstraintOpi`  z0Represent a create exclude constraint operation.excludeNc                X    Xl         X l        X0l        X@l        XPl        X`l        Xpl        g r^   )constraint_namer   elementswherer   _orig_constraintrW   )rU   ri  r   rj  rk  r   rl  rW   s           rY   rC  "CreateExcludeConstraintOp.__init__j  s)      /$ 
 0r\   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)rk  r   rl  
deferrable	initiallyr   )
r0   _table_for_constraintr`   _render_exprsr   rk  r   ro  rp  r   )clsrd   constraint_tabler   r`   ops         rY   from_constraint)CreateExcludeConstraintOp.from_constraint  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`   rk  )rl  r-   SchemaObjectsrO   r   r   r   rj  ri  rk  rW   rr  rQ   r   r   append_constraint)rU   migration_context
schema_objtexclr   r`   opers           rY   to_constraint'CreateExcludeConstraintOp.to_constraint  s       ,(((,,->?
T__T[[A ]]%%**
 gg	
 	
OOF423  	D!r\   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)rs  
operationsri  r   rj  rW   ru  s          rY   rb  3CreateExcludeConstraintOp.create_exclude_constraint  s'    V h="=  $$r\   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   )rZ  r   r   r  )rs  r  ri  rj  rW   ru  s         rY   rc  9CreateExcludeConstraintOp.batch_create_exclude_constraint  sC    & "--8//"<"<hM"M  $$r\   )rl  ri  rj  rW   r   r   rk  )NNN)ri  zsqla_compat._ConstraintNamer   zUnion[str, quoted_name]rj  zIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]rk  z)Optional[Union[ColumnElement[bool], str]]r   r5  rl  zOptional[ExcludeConstraint]r1  r2  )rd   r   r1  rf  r^   )r{  zOptional[MigrationContext]r1  r   )r  r/   ri  rs   r   rs   rj  r   rW   r   r1  Optional[Table])
r  r.   ri  rs   rj  r   rW   r   r1  r  )r8  r  r9  r:  __doc__constraint_typerC  classmethodrv  r  rb  rc  r>  rL   r\   rY   rf  rf  `  s3    ;O <@ $8<4 ,
	 9  6 
* 
*
	"
 
& ?C!;	, +%+% +% 	+%
 +% +% 
+% +%Z %#% % 	%
 % 
% %r\   rf  c                4    [        UR                  5       U SS9$ )NT)alter)_exclude_constraintr  )r  ru  s     rY   _add_exclude_constraintr    s     r//1?$OOr\   c                V    [         R                  " SX5      nUSLa  U$ [        XS5      $ )Nrg  F)r+   _user_defined_renderr  )rd   r  namespace_metadatarendereds       rY   !_render_inline_exclude_constraintr    s5     **:H uzEBBr\   c                D    U R                   nUb  UR                  S5        g)Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)importsadd)r  r  s     rY   _postgresql_autogenerate_prefixr    s#    %%G@Ar\   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	.-  $ )Nro  rp  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=)rr  _render_potential_columnrk  r   r+   _render_potential_exprr   )	sqltextr`   opstringargskvr  rd   optss	         rY   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_batchro  r   rs   rp  r   rO   r   r+   _identr`   _render_gen_namereprr   _alembic_autogenerate_prefixjoinr  )rd   r  r  	has_batchr  r  r  s   ``    @rY   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:
 
 	
r\   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_element)	rr   r   
is_literalr+   _sqlalchemy_autogenerate_prefixr`   r  r   r   )valuer  templates      rY   r  r  J  su     %&&;H3H<<_MJJ
 
 	

 ,,&uz?.KL
 	
r\   )r
  r&   rI  r6   r1  rs   )r
  r   rI  r6   r1  rs   )r
  r!   rI  r6   r1  rs   )r
  r%   rI  r6   )r  rB   ru  rf  r1  rs   )rd   r   r  rB   r  r=   r1  rs   )r  rB   r1  rs   )rd   r   r  rB   r  r7  r1  rs   )r  zGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]r  rB   r1  rs   )p
__future__r   loggingrm   typingr   r   r   r   r   r	   r
   r   r   
sqlalchemyr   r   r   r   r   r   r   r   rR   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&   rZ  r'   r(   ri   r*   autogenerater+   r  r,   r-   operations.baser.   r/   r0   util.sqla_compatr1   r2   r3   r4   $sqlalchemy.dialects.postgresql.arrayr5   #sqlalchemy.dialects.postgresql.baser6   %sqlalchemy.dialects.postgresql.hstorer7   #sqlalchemy.dialects.postgresql.jsonr8   r9   r:   r;   r<   sqlalchemy.sql.schemar=   r>   sqlalchemy.sql.type_apir?   r@   rA   autogenerate.apirB   autogenerate.renderrC   runtime.migrationrD   	getLoggerr8  r   rF   r   rJ  rL  rU  rY  register_operationAddConstraintOpregister_add_constraintrf  	renderersdispatch_forr  _constraint_renderersr  r  r  r  rL   r\   rY   <module>r     s   #  	              %    ( 1 < 2 ) 0 . 4 %     $ #  '  "   !  " - (  '  +:A<89553.+2(*1-4!r
[ r
j;  
+|$$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<
!<
#<
 <
 		<
~

 $	

 	
r\   