
    Ziv                       d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ ddl%m&Z& ddl%m'Z' ddl%m(Z( dd l%m)Z) dd!l%m*Z* dd"l%m+Z+ dd#l%m,Z, dd$l%m-Z- dd%l%m.Z. dd&l/m0Z0 dd'l/m1Z1 d(d)l2m3Z3 d(d*l4m5Z5 d(d+l6m7Z7 d(d,l6m8Z8 d(d-l9m:Z: d(d.l9m;Z; d(d/l3m<Z< d(d0l=m>Z> errd d1lm?Z? d d2lm@Z@ d d3lmAZA d d4lBmCZC d d5lDmEZE d d6lFmGZG d d7lHmIZI d d8lHmJZJ d d9lmKZK d d:lmLZL d d;lmMZM d d<lNmOZO d d=lNmPZP d d>lQmRZR dd?l%mSZS dd@l/mTZT d(dAlUmVZV d(dBlWmXZX d(dClYmZZZ  ej                  e\      Z] G dD dEe1      Z^ G dF dGe(      Z_ e>e.dH      	 	 	 	 	 	 dWdI       Z` e>e_dH      	 	 	 	 	 	 dXdJ       Za e>e)dH      	 	 	 	 	 	 dYdK       Zb e>e-dH      	 	 	 	 dZdL       Zc e;j                  dM       e:j                  dMdN      e7j                  j                  dO       G dP dQe7j                                             Zge5j                  j                  eg      	 	 	 	 	 	 d[dR       Zje5j                  j                  e      	 	 	 	 	 	 	 	 d\dS       Zld]dTZm	 	 	 	 	 	 	 	 d^dUZn	 	 	 	 	 	 d_dVZoy)`    )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                  L    e Zd ZdZdZej                  ddhfz   ZddZd Zd Z	dd	ddddddddd

	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d  fdZ
d Zd Z ej                  d       ej                  d       ej                  d       ej                  d       ej                  d      fZd!dZ	 	 	 	 d"dZ	 	 	 	 	 	 d#dZ	 	 	 	 	 	 d$dZ	 	 	 	 	 	 d%dZd&dZ	 	 d'	 	 	 	 	 	 	 	 	 d( fdZ	 	 	 	 	 	 d)dZ	 	 	 	 	 	 d*dZ	 	 	 	 	 	 d+dZ	 	 	 	 	 	 d,dZ	 	 	 	 	 	 d-dZ xZS ).PostgresqlImpl
postgresqlTFLOATzDOUBLE PRECISIONc                    |j                   j                  dd       xs d}|D ]N  }||j                  j                  vs|j                  j	                  t        |t        j                               P | j                  t        |fi |       y )Npostgresql_include )
kwargsgettablecappend_columnr   sqltypesNullType_execr   )selfindexkwrJ   cols        R/home/portmadness/app/.venv/lib/python3.12/site-packages/alembic/ddl/postgresql.pycreate_indexzPostgresqlImpl.create_indexY   sz     #\\--.BDIOR% 	C%++--'))3 1 12	
 	

;u++,    c                    |j                   D ]9  }|j                  |j                  |j                  v s)| j                  |       ; y N)constraintsnamenamed_constraintsdrop_constraint)rT   
batch_implrN   
constraints       rX   prep_table_for_batchz#PostgresqlImpl.prep_table_for_batche   sA    ++ 	1J+OOz'C'CC$$Z0	1rZ   c                &   |j                   r||j                  j                  u ry|}|r(t        j                  d|      r|j                  dd      }||k(  }|ryd |||j                  fv r| S |j                  j                  }t        |t              rHt        |j                  t        t        f      st        j                  dd|      }d| d}t        |      }| j                  }|J |j!                  t#        t        |      |k(               S )NFnextval\('(.+?)'::regclass\)z
::regclass z^'|'$')primary_keyrN   _autoincrement_columnrematchreplaceserver_defaultarg
isinstancestrtyper   r   subr   
connectionscalarr   )	rT   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaultconn_col_defaultdefaults_equalmetadata_defaultconns	            rX   compare_server_defaultz%PostgresqlImpl.compare_server_defaultm   s0    ''?#8#8#N#NN5+-=!
  077bI)-FF%**
 

 &%%*99==&,.33gu5EF#%66(B8H#I %&'7&8#: -.>?
 ;;>"237GGH
 
 	
rZ   NF)
nullablerm   r^   type_schemaautoincrementexisting_typeexisting_server_defaultexisting_nullableexisting_autoincrementc       
            |j                  dd       }||t        j                  d      |"| j                  t	        ||||||	|
|             t        |   ||f||||||	|
||d	| y )Npostgresql_usingz6postgresql_using must be used with the type_ parameter)r   usingr   r   r   )	r~   rm   r^   r   r   r   r   r   r   )popr*   CommandErrorrS   PostgresqlColumnTypesuperr   )rT   
table_namecolumn_namer~   rm   r^   r   r   r   r   r   r   r   rV   r   	__class__s                  rX   r   zPostgresqlImpl.alter_column   s    * )40##H  JJ$!"/,C&7	 		
 )''$;/#9	
 	
rZ   c                |   |j                  d      rt        |d   t        t        f      rt	        j
                  d|d         }|rut        j                  |t        d      |j                  d            j                         }|r4|\  }}||d   k(  r&t        j                  d||j                  |       |d= y y y y y y )	Ndefaultrq   re   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)rM   ro   r   r   rj   rk   r0   _exec_on_inspectorr   groupfirstloginfor^   )rT   	inspectorrN   column_info	seq_matchr   r   colnames           rX   autogen_column_reflectz%PostgresqlImpl.autogen_column_reflect   s    ??9%*'6!2+
 /Y1GI "55	; &OOA. %'   '+$GW+f"55; $!JJ# (	2 6 # +
%rZ   c                    |D ch c]  }|j                   j                  d      r|! }}|D ]  }|j                  |        t        j                  s| j                  ||       y y c c}w )Nduplicates_constraint)r   rM   remover0   sqla_2_skip_functional_indexes)rT   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexesrU   doubled_constraintsixs           rX   correct_for_autogen_constraintsz.PostgresqlImpl.correct_for_autogen_constraints   sx     &
zz~~56 
 
 & 	$B#	$ !!))*:LI "
s   $A'z( asc nulls last)$z(?<! desc)( nulls last)$z( asc)$z( asc) nulls first$z desc( nulls first)$c                   |j                         j                  dd      j                  dd      }|j                  7|j                  |j                  j                  j                          dd      }d|v rt	        j
                  dd|      }|r(|d   dk(  r |d	   d
k(  r|dd	 }|r|d   dk(  r	|d	   d
k(  r| j                  D ]6  }|j                  |      x}s|j                  d      \  }}|d | ||d  z   } n |r(|d   dk(  r |d	   d
k(  r|dd	 }|r|d   dk(  r	|d	   d
k(  rt	        j                  d      }|j                  |      r)|j                  d|      }t	        j
                  dd|      }|j                  dd      }|S )N"rf   rg   .z::z(::[\w ]+\w)r   ()r   z	cast\s*\(zas\s+[^)]+\) )lowerrl   rN   r^   rj   rr   _default_modifiers_researchspancompilerk   )rT   rU   exprrsrk   startendcast_res           rX   _cleanup_index_exprz"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]
sFU|d34j0		 tAw#~$r(c/":D tAw#~$r(c/ **\*==;;r4(D66/2t4D||C$rZ   c                <    |j                   j                  d      ryy)Npostgresql_nulls_not_distinct)nulls_not_distinctrK   )dialect_kwargsrM   )rT   items     rX   _dialect_optionszPostgresqlImpl._dialect_optionsH  s    
 ""#BC*rZ   c           
        g }| j                  ||      }|r|j                  |       |j                  }|j                  }t        |      t        |      k7  r)|j                  dt        |       dt        |              |rt	        j
                  |      S g }t        t        ||      d      D ]  \  }\  }	}
| j                  |	      }| j                  ||      }| j                  |
      }| j                  ||      }||k(  rU|j                         j                  d      rJd|v sd|v rB|j                  d| d|d       t        j                  d	| d|d
|j                  d       |j                  d| d|d|        | j                  |      }| j                  |      }||k7  r|j!                  d| d|        |rt	        j
                  |      S |rt	        j"                  |      S t	        j$                         S )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)rT   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                    rX   compare_indexeszPostgresqlImpl.compare_indexesQ  s   
 //O

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

\#a	}DNO5	P8 )).9	))/:		!JJ)D<=#--c22#((..#))++rZ   c                   | j                  |      }| j                  |      }|j                  }|j                  }||k7  rt        j                  d| d|       S | j                  |j                        }| j                  |j                        }||k7  rt        j                  d| d|       S t        j                         S )Nzexpression r   )_create_metadata_constraint_sig _create_reflected_constraint_sigunnamedr'   r   r   constr   )	rT   metadata_constraintreflected_constraintmetadata_tupreflected_tupmeta_sigconn_sigmetadata_doconn_dos	            rX   compare_unique_constraintz(PostgresqlImpl.compare_unique_constraint  s    
 ;;
 == 
  '' ((x#--hZtH:6  ++L,>,>?''(;(;<'!#--gYd;-8   %%''rZ   c                    |j                  di       j                         }|j                  d      s|j                  dd        |S )Ndialect_optionsrJ   )rM   copyr   )rT   reflected_objectkindoptionss       rX    adjust_reflected_dialect_optionsz/PostgresqlImpl.adjust_reflected_dialect_options  sA     #&&'8"=BBD{{/0KK,d3rZ   c                z    t        |t              r|S |j                  | j                  ddd      j                  S )NTF)literal_bindsinclude_table)dialectcompile_kwargs)ro   rp   r   r   string)rT   elements     rX   r   zPostgresqlImpl._compile_element  s=    gs#NLL-1EJ  
 &	rZ   c                n    |r t        |t              s|j                         }t        |   |f||d|S )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        )is_server_defaultis_index)ro   r   
self_groupr   render_ddl_sql_expr)rT   r   r   r  rV   r   s        rX   r  z"PostgresqlImpl.render_ddl_sql_expr  sD      Jt\:??$Dw*
$5
LN
 	
rZ   c                    t        |      j                  }|j                  d      syt        | d|j                  z        r"t        | d|j                  z        } |||      S y)Nzsqlalchemy.dialects.postgresqlFz_render_%s_type)rq   
__module__
startswithhasattr__visit_name__getattr)rT   r   autogen_contextmodmeths        rX   render_typezPostgresqlImpl.render_type  sa     5k$$~~>?4*U-A-AAB4!2U5I5I!IJD//rZ   c           	     N    t        t        t        j                  ||dd            S )N	text_typez(.+?\(.*text_type=)r   rp   r+   _render_type_w_subtyperT   r   r
  s      rX   _render_HSTORE_typez"PostgresqlImpl._render_HSTORE_type  s,     ))5K
 	
rZ   c           	     N    t        t        t        j                  ||dd            S )N	item_typez(.+?\()r  r  s      rX   _render_ARRAY_typez!PostgresqlImpl._render_ARRAY_type  s+     ))Z
 	
rZ   c           	     N    t        t        t        j                  ||dd            S Nastext_typez(.+?\(.*astext_type=)r  r  s      rX   _render_JSON_typez PostgresqlImpl._render_JSON_type  ,     ))7O
 	
rZ   c           	     N    t        t        t        j                  ||dd            S r  r  r  s      rX   _render_JSONB_typez!PostgresqlImpl._render_JSONB_type  r  rZ   )rU   r3   rV   r   returnNone)r   rp   r   rp   r~   Optional[bool]rm   3Optional[Union[_ServerDefaultType, Literal[False]]]r^   Optional[str]r   Optional[TypeEngine]r   r"  r   r   r   r#  r   r!  r   r   r   r   rV   r   r  r  )rU   r3   r   rp   r  rp   )r   zUnion[Index, UniqueConstraint]r  zTuple[Any, ...])r   r3   r   r3   r  r'   )r   r4   r   r4   r  r'   )r   rA   r   rp   r  zDict[str, Any])r   zUnion[ClauseElement, str]r  rp   )FF)
r   r:   r   boolr  r$  rV   r   r  rp   )r   r?   r
  rB   r  zUnion[str, Literal[False]])r   r7   r
  rB   r  rp   )r   r5   r
  rB   r  rp   )r   r8   r
  rB   r  rp   )r   r9   r
  rB   r  rp   )__name__r  __qualname____dialect__transactional_ddlr(   type_synonymsrY   rc   r}   r   r   r   rj   r   r   r   r   r   r   r   r   r  r  r  r  r  r  __classcell__r   s   @rX   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
r%3NJ> 	

'(

-.

9

()

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

 
 

.2@	#

.<
	


-;
	


,:
	


-;
	
rZ   rF   c                  0     e Zd Z	 	 	 	 	 	 	 	 d fdZ xZS )r   c                    |j                  dd       }t        |   ||fi | t        j                  |      | _        || _        y )Nr   )r   r   __init__rQ   to_instancer   r   )rT   r^   r   r   rV   r   r   s         rX   r.  zPostgresqlColumnType.__init__  sB     w%{1b1))%0

rZ   )r^   rp   r   rp   r   r?   r  r  )r%  r  r&  r.  r*  r+  s   @rX   r   r     s-    &)2<	 rZ   r   rG   c                x    t        || j                  | j                        dt        || j                  d       S )Nz RENAME TO )r   r   r   r#   new_table_namer   compilerrV   s      rX   visit_rename_tabler4    s6    
 	Hg00'..A(G$:$:DA rZ   c           	         t        || j                  | j                        dt        || j                        ddt        || j                        z  d| j                  rd| j                  z  S dS )Nr   zTYPE %szUSING %srf   )r   r   r   r   r   r$   r   r   r2  s      rX   visit_column_typer6    sn    
 	Hg00'..AXw223K'--88&-mm
W]]";	  :<;	 rZ   c                    d}| j                   8|j                  j                  | j                   t        j                               nd}|j                  t        || j                  | j                        t        || j                        |      S )Nz9COMMENT ON COLUMN {table_name}.{column_name} IS {comment}NULL)r   r   comment)r9  sql_compilerrender_literal_valuerQ   Stringformatr#   r   r   r"   r   )r   r3  rV   ddlr9  s        rX   visit_column_commentr?  '  s     FC
 ??& 	22OOX__.	
   ::$g(('..
 'x1D1DE   rZ   c                4   t        || j                  | j                        dt        || j                        d}| j
                  |dz  }|S | j                  %|dz  }||j                  | j
                        z  }|S | j                  j                  | j
                  | j                        \  }}}| j
                  }t        |      D ]J  }|dk(  r|d|j                  rdndz  z  }|d|j                  t        d	i |t        ||      i      z  z  }L |S )
Nr   zDROP IDENTITYzADD alwayszSET GENERATED %s ALWAYSz
BY DEFAULTzSET %s rK   )r   r   r   r   r   r   r   visit_identity_columnimpl_compare_identity_defaultsortedrA  get_identity_optionsr   r	  )r   r3  rV   r   diff_identityattrs           rX   rC  rC  =  s+   
 	Hg00'..AXw223D 		(	(	0..w?? \\;;OOW<<

a ??4L 	Dx+ (H\  	H$A$A?gh&=>?%  	 rZ   create_exclude_constraintbatch_create_exclude_constraintexclude_constraintc                      e Zd ZdZdZ	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 d
dZe	 	 	 	 dd       Z	 d	 	 	 ddZe	 	 	 	 	 	 	 	 	 	 	 	 dd       Z	e	 	 	 	 	 	 	 	 	 	 dd       Z
y)CreateExcludeConstraintOpz0Represent a create exclude constraint operation.excludeNc                f    || _         || _        || _        || _        || _        || _        || _        y r\   )constraint_namer   elementswherer   _orig_constraintrV   )rT   rS  r   rT  rU  r   rV  rV   s           rX   r.  z"CreateExcludeConstraintOp.__init__j  s7      /$ 
 0rZ   c                @   t        j                  |      } | |j                  |j                  |j                  D cg c]
  \  }}}||f c}}}t	        d|j
                        |j                  ||j                  |j                  |j                  	      S c c}}}w )NzColumnElement[bool] | None)rU  r   rV  
deferrable	initiallyr   )
r0   _table_for_constraintr^   _render_exprsr   rU  r   rX  rY  r   )clsrb   constraint_tabler   r^   ops         rX   from_constraintz)CreateExcludeConstraintOp.from_constraint  s     '<<ZHOO!!1;1I1I -tT2r
 3Z5E5EF#**'!,, **""
 	
s   Bc                   | j                   | j                   S t        j                  |      }|j                  | j                  | j
                        }t        | j                  | j                  | j                  d| j                  }|j                  D ]%  \  }}}|j                  t        |t                     ' |j                  |       |S )N)r   )r^   rU  )rV  r-   SchemaObjectsrN   r   r   r   rT  rS  rU  rV   r[  rP   r   r   append_constraint)rT   migration_context
schema_objtexclr   r^   opers           rX   to_constraintz'CreateExcludeConstraintOp.to_constraint  s       ,(((,,->?
T__T[[A ]]%%**
 gg	
 		4 
OOF423	4 	
D!rZ   c                :     | |||fi |}|j                  |      S )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)r\  
operationsrS  r   rT  rV   r^  s          rX   rL  z3CreateExcludeConstraintOp.create_exclude_constraint  s)    V *h="=  $$rZ   c                    |j                   j                  |d<    | ||j                   j                  |fi |}|j                  |      S )a3  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   )rD  r   r   rj  )r\  rk  rS  rT  rV   r^  s         rX   rM  z9CreateExcludeConstraintOp.batch_create_exclude_constraint  sE    & "--8*//"<"<hM"M  $$rZ   )NNN)rS  zsqla_compat._ConstraintNamer   zUnion[str, quoted_name]rT  zIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]rU  z)Optional[Union[ColumnElement[bool], str]]r   r"  rV  zOptional[ExcludeConstraint]r  r  )rb   r   r  rP  r\   )rc  zOptional[MigrationContext]r  r   )rk  r/   rS  rp   r   rp   rT  r   rV   r   r  Optional[Table])
rk  r.   rS  rp   rT  r   rV   r   r  rm  )r%  r  r&  __doc__constraint_typer.  classmethodr_  rh  rL  rM  rK   rZ   rX   rP  rP  `  s3    ;O <@ $8<4 ,
	 9  6 
* 
*
	"
 
& ?C!;	, +%+% +% 	+%
 +% +% 
+% +%Z %#% % 	%
 % 
% %rZ   rP  c                :    t        |j                         | d      S )NT)alter)_exclude_constraintrh  )r
  r^  s     rX   _add_exclude_constraintrt    s     r//1?$OOrZ   c                V    t        j                  d| |      }|dur|S t        | |d      S )NrQ  F)r+   _user_defined_renderrs  )rb   r
  namespace_metadatarendereds       rX   !_render_inline_exclude_constraintry    s9     **:H uz?EBBrZ   c                B    | j                   }||j                  d       y)Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)importsadd)r
  r{  s     rX   _postgresql_autogenerate_prefixr}    s#    %%G@ArZ   c                    g j                   } j                  r&j                  dt         j                        f        j                  r&j                  dt         j                        f        j
                  r&j                  dt         j
                        f       |sR|rP j                  j                  r:j                  dt        j                   j                  j                        f       |s= j                  r1j                  dt        j                   j                        f        fd}|rt        t        j                   j                              g}|s6|t        t        j                   j                  j                              gz  }|j                   |              dt        j                        dj                  |      d	z  S  |       }d
t!              dj                  |      d	z  S )NrX  rY  r   r   r^   c            
     T   j                   D  cg c]  \  } }}dt        |       d|d }}} }j                  2|j                  dt	        j
                  j                        z         |j                  D cg c]  \  }}|d| c}}       |S c c}}} w c c}}w )Nr   , r   zwhere=%s=)r[  _render_potential_columnrU  r   r+   _render_potential_exprr   )	sqltextr^   opstringargskvr
  rb   optss	         rX   do_expr_where_optsz/_exclude_constraint.<locals>.do_expr_where_opts!  s     ,6+C+C

 

 (x )# 

 

 'KK//$$o 	$7$!Q1%78'

$ 8s   BB$
z-%(prefix)screate_exclude_constraint(%(args)s)r  )prefixr  z%%(prefix)sExcludeConstraint(%(args)s))
_has_batchrX  r   rp   rY  r   rN   r   r+   _identr^   _render_gen_namereprr   _alembic_autogenerate_prefixjoinr}  )rb   r
  rr  	has_batchr  r  r  s   ``    @rX   rs  rs    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:
 
 	
rZ   c           	         t        | t              r6| j                  rd}nd}|t        j                  |      | j
                  dz  S t        j                  | |t        | t        t        f            S )Nz"%(prefix)sliteral_column(%(name)r)z%(prefix)scolumn(%(name)r))r  r^   )wrap_in_element)	ro   r   
is_literalr+   _sqlalchemy_autogenerate_prefixr^   r  r   r   )valuer
  templates      rX   r  r  J  sr     %&;H3H<<_MJJ
 
 	

 ,,&uz?.KL
 	
rZ   )r   r&   r3  r6   r  rp   )r   r   r3  r6   r  rp   )r   r!   r3  r6   r  rp   )r   r%   r3  r6   )r
  rB   r^  rP  r  rp   )rb   r   r
  rB   rw  r=   r  rp   )r
  rB   r  rp   )rb   r   r
  rB   rr  r$  r  rp   )r  zGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]r
  rB   r  rp   )p
__future__r   loggingrj   typingr   r   r   r   r   r	   r
   r   r   
sqlalchemyr   r   r   r   r   r   r   r   rQ   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&   rD  r'   r(   rf   r*   autogenerater+   rk  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   	getLoggerr%  r   rF   r   r4  r6  r?  rC  register_operationAddConstraintOpregister_add_constraintrP  	renderersdispatch_forrt  _constraint_renderersry  r}  rs  r  rK   rZ   rX   <module>r     s   #  	              %    ( 1 < 2 ) 0 . 4 %     $ #  '  "   !  " - (  '  +:A<89553.+2(*1-4g!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<
!<
#<
 <
 		<
~

 $	

 	
rZ   