
    +ht                       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rld 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@lTmUZU d(dAlVmWZW d(dBlXmYZY  ej                  e[      Z\ G dC dDe1      Z] G dE dFe(      Z^ e>e.dG      	 	 	 	 	 	 dVdH       Z_ e>e^dG      	 	 	 	 	 	 dWdI       Z` e>e)dG      	 	 	 	 	 	 dXdJ       Za e>e-dG      	 	 	 	 dYdK       Zb e;j                  dL       e:j                  dLdM      e7j                  j                  dN       G dO dPe7j                                             Zfe5j                  j                  ef      	 	 	 	 	 	 dZdQ       Zie5j                  j                  e      	 	 	 	 	 	 	 	 d[dR       Zkd\dSZl	 	 	 	 	 	 	 	 d]dTZm	 	 	 	 	 	 d^dUZny)_    )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)_ServerDefault)AutogenContext)_f_name)MigrationContextc                  J    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 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kwrI   cols        I/var/www/html/venv/lib/python3.12/site-packages/alembic/ddl/postgresql.pycreate_indexzPostgresqlImpl.create_indexX   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)rS   
batch_implrM   
constraints       rW   prep_table_for_batchz#PostgresqlImpl.prep_table_for_batchd   sA    ++ 	1J+OOz'C'CC$$Z0	1rY   c                   |j                   r||j                  j                  u ry|}||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 )NFz^'|'$ ')primary_keyrM   _autoincrement_columnserver_defaultarg
isinstancestrtyper   r   resubr   
connectionscalarr   )	rS   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaultconn_col_defaultdefaults_equalmetadata_defaultconns	            rW   compare_server_defaultz%PostgresqlImpl.compare_server_defaultl   s    ''?#8#8#N#NN5)-FF%**
 

 &%%*99==&,.33gu5EF#%66(B8H#I %&'7&8#: -.>? ;;>"237GGH
 
 	
rY   c                    |j                  dd       }||t        j                  d      |"| j                  t	        ||||||	|
|             t        |   ||f||||||	|
||d	| y )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*   CommandErrorrR   PostgresqlColumnTypesuperr   )rS   
table_namecolumn_namer   rh   r]   type_r|   r   r~   r   r   r   rU   r}   	__class__s                  rW   r   zPostgresqlImpl.alter_column   s      )40##H  JJ$!"/,C&7	 		
 )''$;/#9	
 	
rY   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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)rL   rj   r   r   rm   matchr0   _exec_on_inspectorr   groupfirstloginfor]   )rS   	inspectorrM   column_info	seq_matchr   r   colnames           rW   autogen_column_reflectz%PostgresqlImpl.autogen_column_reflect   s    ??9%*'6!2+
 /Y1GI "55	; &OOA. %'   '+$GW+f"55; $!JJ# (	2 6 # +
%rY   c                    |D ch c]  }|j                   j                  d      r|! }}|D ]  }|j                  |        t        j                  s| j                  ||       y y c c}w )Nduplicates_constraint)r   rL   remover0   sqla_2_skip_functional_indexes)rS   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexesrT   doubled_constraintsixs           rW   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"rd   re   .z::z(::[\w ]+\w)r   ()r   z	cast\s*\(zas\s+[^)]+\) )lowerreplacerM   r]   rm   rn   _default_modifiers_researchspancompiler   )rS   rT   exprrsr   startendcast_res           rW   _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$rY   c                <    |j                   j                  d      ryy)Npostgresql_nulls_not_distinct)nulls_not_distinctrJ   )dialect_kwargsrL   )rS   items     rW   _dialect_optionszPostgresqlImpl._dialect_options:  s    
 ""#BC*rY   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)rS   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                    rW   compare_indexeszPostgresqlImpl.compare_indexesC  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#((..#))++rY   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   )	rS   metadata_constraintreflected_constraintmetadata_tupreflected_tupmeta_sigconn_sigmetadata_doconn_dos	            rW   compare_unique_constraintz(PostgresqlImpl.compare_unique_constraint  s    
 ;;
 == 
  '' ((x#--hZtH:6  ++L,>,>?''(;(;<'!#--gYd;-8   %%''rY   c                    |j                  di       j                         }|j                  d      s|j                  dd        |S )Ndialect_optionsrI   )rL   copyr   )rS   reflected_optionskindoptionss       rW    adjust_reflected_dialect_optionsz/PostgresqlImpl.adjust_reflected_dialect_options  sA     $''(92>CCE{{/0KK,d3rY   c                z    t        |t              r|S |j                  | j                  ddd      j                  S )NTF)literal_bindsinclude_table)dialectcompile_kwargs)rj   rk   r   r   string)rS   elements     rW   r   zPostgresqlImpl._compile_element  s=    gs#NLL-1EJ  
 &	rY   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)rj   r   
self_groupr   render_ddl_sql_expr)rS   r   r   r   rU   r   s        rW   r  z"PostgresqlImpl.render_ddl_sql_expr  sD      Jt\:??$Dw*
$5
LN
 	
rY   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)rl   
__module__
startswithhasattr__visit_name__getattr)rS   r   autogen_contextmodmeths        rW   render_typezPostgresqlImpl.render_type  sa     5k$$~~>?4*U-A-AAB4!2U5I5I!IJD//rY   c           	     N    t        t        t        j                  ||dd            S )N	text_typez(.+?\(.*text_type=)r   rk   r+   _render_type_w_subtyperS   r   r  s      rW   _render_HSTORE_typez"PostgresqlImpl._render_HSTORE_type  s,     ))5K
 	
rY   c           	     N    t        t        t        j                  ||dd            S )N	item_typez(.+?\()r  r  s      rW   _render_ARRAY_typez!PostgresqlImpl._render_ARRAY_type  s+     ))Z
 	
rY   c           	     N    t        t        t        j                  ||dd            S Nastext_typez(.+?\(.*astext_type=)r  r  s      rW   _render_JSON_typez PostgresqlImpl._render_JSON_type  ,     ))7O
 	
rY   c           	     N    t        t        t        j                  ||dd            S r  r  r  s      rW   _render_JSONB_typez!PostgresqlImpl._render_JSONB_type  r  rY   )rT   r3   rU   r   returnNone)
NFNNNNNNNN)r   rk   r   rk   r   Optional[bool]rh   z%Union[_ServerDefault, Literal[False]]r]   Optional[str]r   Optional[TypeEngine]r|   r  r   r  r~   r   r   zOptional[_ServerDefault]r   r  r   r  rU   r   r  r  )rT   r3   r   rk   r  rk   )r   zUnion[Index, UniqueConstraint]r  zTuple[Any, ...])r   r3   r   r3   r  r'   )r   r4   r   r4   r  r'   )r   Dict[str, Any]r   rk   r  r!  )r   zUnion[ClauseElement, str]r  rk   )FF)
r   r:   r   boolr   r"  rU   r   r  rk   )r   r?   r  rA   r  zUnion[str, Literal[False]])r   r7   r  rA   r  rk   )r   r5   r  rA   r  rk   )r   r8   r  rA   r  rk   )r   r9   r  rA   r  rk   )__name__r  __qualname____dialect__transactional_ddlr(   type_synonymsrX   rb   ry   r   r   r   rm   r   r   r   r   r   r   r   r   r  r  r  r  r  r  __classcell__r   s   @rW   rE   rE   Q   s   K--	$%1 M
-1)
^ $(@E"&* $(,.2<@,015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@	#

.<
	


-;
	


,:
	


-;
	
rY   rE   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__rP   to_instancer   r}   )rS   r]   r   r   rU   r}   r   s         rW   r,  zPostgresqlColumnType.__init__  sB     w%{1b1))%0

rY   )r]   rk   r   rk   r   r?   r  r  )r#  r  r$  r,  r(  r)  s   @rW   r   r     s-    &)2<	 rY   r   rF   c                x    t        || j                  | j                        dt        || j                  d       S )Nz RENAME TO )r   r   r|   r#   new_table_namer   compilerrU   s      rW   visit_rename_tabler2    s6    
 	Hg00'..A(G$:$:DA rY   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 %srd   )r   r   r|   r   r   r$   r   r}   r0  s      rW   visit_column_typer4    sn    
 	Hg00'..AXw223K'--88&-mm
W]]";	  :<;	 rY   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)r7  sql_compilerrender_literal_valuerP   Stringformatr#   r   r|   r"   r   )r   r1  rU   ddlr7  s        rW   visit_column_commentr=    s     FC
 ??& 	22OOX__.	
   ::$g(('..
 'x1D1DE   rY   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 rJ   )r   r   r|   r   r   r   r   visit_identity_columnimpl_compare_identity_defaultsortedr?  get_identity_optionsr   r  )r   r1  rU   r   diff_identityattrs           rW   rA  rA  /  s+   
 	Hg00'..AXw223D 		(	(	0..w?? \\;;OOW<<

a ??4L 	Dx+ (H\  	H$A$A?gh&=>?%  	 rY   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_constraintrU   )rS   rQ  r   rR  rS  r|   rT  rU   s           rW   r,  z"CreateExcludeConstraintOp.__init__\  s7      /$ 
 0rY   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)rS  r|   rT  
deferrable	initiallyr}   )
r0   _table_for_constraintr]   _render_exprsr   rS  r|   rV  rW  r}   )clsra   constraint_tabler   r]   ops         rW   from_constraintz)CreateExcludeConstraintOp.from_constraintq  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]   rS  )rT  r-   SchemaObjectsrM   r   r|   r   rR  rQ  rS  rU   rY  rO   r   r   append_constraint)rS   migration_context
schema_objtexclr   r]   opers           rW   to_constraintz'CreateExcludeConstraintOp.to_constraint  s       ,(((,,->?
T__T[[A ]]%%**
 gg	
 		4 
OOF423	4 	
D!rY   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)rZ  
operationsrQ  r   rR  rU   r\  s          rW   rJ  z3CreateExcludeConstraintOp.create_exclude_constraint  s)    V *h="=  $$rY   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|   )rB  r|   r   rh  )rZ  ri  rQ  rR  rU   r\  s         rW   rK  z9CreateExcludeConstraintOp.batch_create_exclude_constraint  sE    & "--8*//"<"<hM"M  $$rY   )NNN)rQ  zsqla_compat._ConstraintNamer   zUnion[str, quoted_name]rR  zIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]rS  z)Optional[Union[ColumnElement[bool], str]]r|   r  rT  zOptional[ExcludeConstraint]r  r  )ra   r   r  rN  r[   )ra  zOptional[MigrationContext]r  r   )ri  r/   rQ  rk   r   rk   rR  r   rU   r   r  Optional[Table])
ri  r.   rQ  rk   rR  r   rU   r   r  rk  )r#  r  r$  __doc__constraint_typer,  classmethodr]  rf  rJ  rK  rJ   rY   rW   rN  rN  R  s3    ;O <@ $8<4 ,
	 9  6 
* 
*
	"
 
& ?C!;	, +%+% +% 	+%
 +% +% 
+% +%Z %#% % 	%
 % 
% %rY   rN  c                :    t        |j                         | d      S )NT)alter)_exclude_constraintrf  )r  r\  s     rW   _add_exclude_constraintrr    s     r//1?$OOrY   c                V    t        j                  d| |      }|dur|S t        | |d      S )NrO  F)r+   _user_defined_renderrq  )ra   r  namespace_metadatarendereds       rW   !_render_inline_exclude_constraintrw    s9     **:H uz?EBBrY   c                B    | j                   }||j                  d       y)Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)importsadd)r  ry  s     rW   _postgresql_autogenerate_prefixr{    s#    %%G@ArY   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 )NrV  rW  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=)rY  _render_potential_columnrS  r   r+   _render_potential_exprr   )	sqltextr]   opstringargskvr  ra   optss	         rW   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_batchrV  r   rk   rW  r}   rM   r|   r+   _identr]   _render_gen_namereprr   _alembic_autogenerate_prefixjoinr{  )ra   r  rp  	has_batchr  r  r  s   ``    @rW   rq  rq    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:
 
 	
rY   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)	rj   r   
is_literalr+   _sqlalchemy_autogenerate_prefixr]   r  r   r   )valuer  templates      rW   r  r  <  sr     %&;H3H<<_MJJ
 
 	

 ,,&uz?.KL
 	
rY   )r   r&   r1  r6   r  rk   )r   r   r1  r6   r  rk   )r   r!   r1  r6   r  rk   )r   r%   r1  r6   )r  rA   r\  rN  r  rk   )ra   r   r  rA   ru  r=   r  rk   )r  rA   r  rk   )ra   r   r  rA   rp  r"  r  rk   )r  zGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]r  rA   r  rk   )o
__future__r   loggingrm   typingr   r   r   r   r   r	   r
   r   r   
sqlalchemyr   r   r   r   r   r   r   r   rP   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&   rB  r'   r(   rd   r*   autogenerater+   ri  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@   autogenerate.apirA   autogenerate.renderrB   runtime.migrationrC   	getLoggerr#  r   rE   r   r2  r4  r=  rA  register_operationAddConstraintOpregister_add_constraintrN  	renderersdispatch_forrr  _constraint_renderersrw  r{  rq  r  rJ   rY   rW   <module>r     s   #  	              %    ( 1 < 2 ) 0 . 4 %     $ #  '  "   !  " - (  ' +:A<89553.+2$1-4 g!e
[ e
P;  
+|$$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<
!<
#<
 <
 		<
~

 $	

 	
rY   