
    gt                       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'l0m1Z1 d&d(l2m3Z3 d&d)l4m5Z5 d&d*l4m6Z6 d&d+l7m8Z8 d&d,l7m9Z9 d&d-l1m:Z: d&d.l;m<Z< erld d/lm=Z= d d0lm>Z> d d1lm?Z? d d2l@mAZA d d3lBmCZC d d4lDmEZE d d5lFmGZG d d6lFmHZH d d7lmIZI d d8lmJZJ d d9lmKZK d d:lLmMZM d d;lLmNZN d d<lOmPZP dd=l#mQZQ d&d>lRmSZS d&d?lTmUZU d&d@lVmWZW  ej                  eY      ZZ G dA dBe/      Z[ G dC dDe&      Z\ e<e,dE      	 	 	 	 	 	 dTdF       Z] e<e\dE      	 	 	 	 	 	 dUdG       Z^ e<e'dE      	 	 	 	 	 	 dVdH       Z_ e<e+dE      	 	 	 	 dWdI       Z` e9j                  dJ       e8j                  dJdK      e5j                  j                  dL       G dM dNe5j                                             Zde3j                  j                  ed      	 	 	 	 	 	 dXdO       Zge3j                  j                  e      	 	 	 	 	 	 	 	 dYdP       ZidZdQZj	 	 	 	 	 	 	 	 d[dRZk	 	 	 	 	 	 d\dSZly)]    )annotationsN)Any)cast)Dict)List)Optional)Sequence)Tuple)TYPE_CHECKING)Union)Column)Float)literal_column)Numeric)text)types)BIGINT)ExcludeConstraint)INTEGER)CreateIndex)ColumnClause)
TextClause)FunctionElement)NULLTYPE   )alter_column)alter_table)AlterColumn)ColumnComment)format_column_name)format_table_name)format_type)IdentityColumnDefault)RenameTable)ComparisonResult)DefaultImpl   )util)render)ops)	schemaobj)BatchOperations)
Operations)sqla_compat)compiles)Literal)Index)UniqueConstraint)ARRAY)PGDDLCompiler)HSTORE)JSON)JSONB)ClauseElement)ColumnElement)quoted_name)MetaData)Table)
TypeEngine)_ServerDefault)AutogenContext)_f_name)MigrationContextc                  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kwrG   cols        U/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/alembic/ddl/postgresql.pycreate_indexzPostgresqlImpl.create_indexV   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)rQ   
batch_implrK   
constraints       rU   prep_table_for_batchz#PostgresqlImpl.prep_table_for_batchb   sA    ++ 	1J+OOz'C'CC$$Z0	1rW   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        j                   t        |      |k(               S )NFz^'|'$ ')primary_keyrK   _autoincrement_columnserver_defaultarg
isinstancestrtyper   r   resubr   
connectionscalarr.   _select)	rQ   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaultconn_col_defaultdefaults_equalmetadata_defaultconns	            rU   compare_server_defaultz%PostgresqlImpl.compare_server_defaultj   s    ''?#8#8#N#NN5)-FF%**
 

 &%%*99==&,.33gu5EF#%66(B8H#I %&'7&8#: -.>? ;;/04DD
 
 	
rW   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)	nullablerf   r[   r{   autoincrementr}   r~   r   existing_autoincrement)popr(   CommandErrorrP   PostgresqlColumnTypesuperr   )rQ   
table_namecolumn_namer   rf   r[   type_r{   r   r}   r~   r   r   rS   r|   	__class__s                  rU   r   zPostgresqlImpl.alter_column   s      )40##H  JJ$!"/,C&7	 		
 )''$;/#9	
 	
rW   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defaultrj   znextval\('(.+?)'::regclass\)a9  select c.relname, a.attname from pg_class as c join pg_depend d on d.objid=c.oid and d.classid='pg_class'::regclass and d.refclassid='pg_class'::regclass join pg_class t on t.oid=d.refobjid join pg_attribute a on a.attrelid=t.oid and a.attnum=d.refobjsubid where c.relkind='S' and c.oid=cast(:seqname as regclass)r   )seqnamer[   z^Detected sequence named '%s' as owned by integer column '%s(%s)', assuming SERIAL and omitting)rJ   rh   r   r   rk   matchr.   _exec_on_inspectorr   groupfirstloginfor[   )rQ   	inspectorrK   column_info	seq_matchr   r   colnames           rU   autogen_column_reflectz%PostgresqlImpl.autogen_column_reflect   s    ??9%*'6!2+
 /Y1GI "55	; &OOA. %'   '+$GW+f"55; $!JJ# (	2 6 # +
%rW   c                    |D ch c]  }|j                   j                  d      r|! }}|D ]  }|j                  |        t        j                  s| j                  ||       y y c c}w )Nduplicates_constraint)r   rJ   remover.   sqla_2_skip_functional_indexes)rQ   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexesrR   doubled_constraintsixs           rU   correct_for_autogen_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"rb   rc   .z::z(::[\w ]+\w)r   ()r   z	cast\s*\(zas\s+[^)]+\) )lowerreplacerK   r[   rk   rl   _default_modifiers_researchspancompiler   )rQ   rR   exprrsr   startendcast_res           rU   _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$rW   c                <    |j                   j                  d      ryy)Npostgresql_nulls_not_distinct)nulls_not_distinctrH   )dialect_kwargsrJ   )rQ   items     rU   _dialect_optionszPostgresqlImpl._dialect_options:  s    
 ""#BC*rW   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)rQ   metadata_indexreflected_indexmsg
unique_msgm_exprsr_exprsskipposm_er_e	m_compilem_text	r_compiler_text	m_options	r_optionss                    rU   compare_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#((..#))++rW   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   )	rQ   metadata_constraintreflected_constraintmetadata_tupreflected_tupmeta_sigconn_sigmetadata_doconn_dos	            rU   compare_unique_constraintz(PostgresqlImpl.compare_unique_constraint  s    
 ;;
 == 
  '' ((x#--hZtH:6  ++L,>,>?''(;(;<'!#--gYd;-8   %%''rW   c                    |j                  di       j                         }|j                  d      s|j                  dd        |S )Ndialect_optionsrG   )rJ   copyr   )rQ   reflected_optionskindoptionss       rU    adjust_reflected_dialect_optionsz/PostgresqlImpl.adjust_reflected_dialect_options  sA     $''(92>CCE{{/0KK,d3rW   c                z    t        |t              r|S |j                  | j                  ddd      j                  S )NTF)literal_bindsinclude_table)dialectcompile_kwargs)rh   ri   r   r   string)rQ   elements     rU   r   zPostgresqlImpl._compile_element  s=    gs#NLL-1EJ  
 &	rW   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)rh   r   
self_groupr   render_ddl_sql_expr)rQ   r   r   r   rS   r   s        rU   r   z"PostgresqlImpl.render_ddl_sql_expr  sD      Jt\:??$Dw*
$5
LN
 	
rW   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)rj   
__module__
startswithhasattr__visit_name__getattr)rQ   r   autogen_contextmodmeths        rU   render_typezPostgresqlImpl.render_type  sa     5k$$~~>?4*U-A-AAB4!2U5I5I!IJD//rW   c           	     N    t        t        t        j                  ||dd            S )N	text_typez(.+?\(.*text_type=)r   ri   r)   _render_type_w_subtyperQ   r   r  s      rU   _render_HSTORE_typez"PostgresqlImpl._render_HSTORE_type  s,     ))5K
 	
rW   c           	     N    t        t        t        j                  ||dd            S )N	item_typez(.+?\()r  r  s      rU   _render_ARRAY_typez!PostgresqlImpl._render_ARRAY_type  s+     ))Z
 	
rW   c           	     N    t        t        t        j                  ||dd            S Nastext_typez(.+?\(.*astext_type=)r  r  s      rU   _render_JSON_typez PostgresqlImpl._render_JSON_type  ,     ))7O
 	
rW   c           	     N    t        t        t        j                  ||dd            S r  r  r  s      rU   _render_JSONB_typez!PostgresqlImpl._render_JSONB_type  r  rW   )rR   r1   rS   r   returnNone)
NFNNNNNNNN)r   ri   r   ri   r   Optional[bool]rf   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  rS   r   r  r  )rR   r1   r   ri   r  ri   )r   zUnion[Index, UniqueConstraint]r  zTuple[Any, ...])r   r1   r   r1   r  r%   )r   r2   r   r2   r  r%   )r   Dict[str, Any]r   ri   r  r   )r   zUnion[ClauseElement, str]r  ri   )FF)
r   r8   r   boolr   r!  rS   r   r  ri   )r   r=   r  r?   r  zUnion[str, Literal[False]])r   r5   r  r?   r  ri   )r   r3   r  r?   r  ri   )r   r6   r  r?   r  ri   )r   r7   r  r?   r  ri   )__name__r  __qualname____dialect__transactional_ddlr&   type_synonymsrV   r`   rx   r   r   r   rk   r   r   r   r   r   r   r   r   r   r
  r  r  r  r  __classcell__r   s   @rU   rC   rC   O   s   K--	$%1 M
-1+
b $(@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@	#

.<
	


-;
	


,:
	


-;
	
rW   rC   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__rN   to_instancer   r|   )rQ   r[   r   r   rS   r|   r   s         rU   r+  zPostgresqlColumnType.__init__  sB     w%{1b1))%0

rW   )r[   ri   r   ri   r   r=   r  r  )r"  r  r#  r+  r'  r(  s   @rU   r   r     s-    &)2<	 rW   r   rD   c                x    t        || j                  | j                        dt        || j                  d       S )Nz RENAME TO )r   r   r{   r!   new_table_namer   compilerrS   s      rU   visit_rename_tabler1    s6    
 	Hg00'..A(G$:$:DA rW   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 %srb   )r   r   r{   r   r   r"   r   r|   r/  s      rU   visit_column_typer3    sn    
 	Hg00'..AXw223K'--88&-mm
W]]";	  :<;	 rW   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)r6  sql_compilerrender_literal_valuerN   Stringformatr!   r   r{   r    r   )r   r0  rS   ddlr6  s        rU   visit_column_commentr<    s     FC
 ??& 	22OOX__.	
   ::$g(('..
 'x1D1DE   rW   c                H   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 ]T  }|dk(  r|d|j                  rdndz  z  }|d|j                  t        j                  d	i |t        ||      i      z  z  }V |S )
Nr   zDROP IDENTITYzADD alwayszSET GENERATED %s ALWAYSz
BY DEFAULTzSET %s rH   )r   r   r{   r   r   r   r~   visit_identity_columnimpl_compare_identity_defaultsortedr>  get_identity_optionsr.   Identityr  )r   r0  rS   r   diff_identityattrs           rU   r@  r@  /  s1   
 	Hg00'..AXw223D 		(	(	0..w?? \\;;OOW<<

a ??4L 	Dx+ (H\  	H$A$A((KD'(D2I+JK%  	 rW   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 rY   )constraint_namer   elementswherer{   _orig_constraintrS   )rQ   rQ  r   rR  rS  r{   rT  rS   s           rU   r+  z"CreateExcludeConstraintOp.__init__\  s7      /$ 
 0rW   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|   )
r.   _table_for_constraintr[   _render_exprsr   rS  r{   rV  rW  r|   )clsr_   constraint_tabler   r[   ops         rU   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+   SchemaObjectsrK   r   r{   r   rR  rQ  rS  rS   rY  rM   r   r   append_constraint)rQ   migration_context
schema_objtexclr   r[   opers           rU   to_constraintz'CreateExcludeConstraintOp.to_constraint  s       ,(((,,->?
T__T[[A ]]%%**
 gg	
 		4 
OOF423	4 	
D!rW   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  rS   r\  s          rU   rJ  z3CreateExcludeConstraintOp.create_exclude_constraint  s)    V *h="=  $$rW   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{   )rA  r{   r   rh  )rZ  ri  rQ  rR  rS   r\  s         rU   rK  z9CreateExcludeConstraintOp.batch_create_exclude_constraint  sE    & "--8*//"<"<hM"M  $$rW   )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  )r_   r   r  rN  rY   )ra  zOptional[MigrationContext]r  r   )ri  r-   rQ  ri   r   ri   rR  r   rS   r   r  Optional[Table])
ri  r,   rQ  ri   rR  r   rS   r   r  rk  )r"  r  r#  __doc__constraint_typer+  classmethodr]  rf  rJ  rK  rH   rW   rU   rN  rN  R  s3    ;O <@ $8<4 ,
	 9  6 
* 
*
	"
 
& ?C!;	, +%+% +% 	+%
 +% +% 
+% +%Z %#% % 	%
 % 
% %rW   rN  c                :    t        |j                         | d      S )NT)alter)_exclude_constraintrf  )r  r\  s     rU   _add_exclude_constraintrr    s     r//1?$OOrW   c                V    t        j                  d| |      }|dur|S t        | |d      S )NrO  F)r)   _user_defined_renderrq  )r_   r  namespace_metadatarendereds       rU   !_render_inline_exclude_constraintrw    s9     **:H uz?EBBrW   c                B    | j                   }||j                  d       y)Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)importsadd)r  ry  s     rU   _postgresql_autogenerate_prefixr{    s#    %%G@ArW   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  r_   optss	         rU   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   ri   rW  r|   rK   r{   r)   _identr[   _render_gen_namereprr   _alembic_autogenerate_prefixjoinr{  )r_   r  rp  	has_batchr  r  r  s   ``    @rU   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:
 
 	
rW   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_text)	rh   r   
is_literalr)   _sqlalchemy_autogenerate_prefixr[   r  r   r   )valuer  templates      rU   r  r  <  sr     %&;H3H<<_MJJ
 
 	

 ,,#EJ+HI
 	
rW   )r   r$   r0  r4   r  ri   )r   r   r0  r4   r  ri   )r   r   r0  r4   r  ri   )r   r#   r0  r4   )r  r?   r\  rN  r  ri   )r_   r   r  r?   ru  r;   r  ri   )r  r?   r  ri   )r_   r   r  r?   rp  r!  r  ri   )r  zGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]r  r?   r  ri   )m
__future__r   loggingrk   typingr   r   r   r   r   r	   r
   r   r   
sqlalchemyr   r   r   r   r   r   rN   sqlalchemy.dialects.postgresqlr   r   r   sqlalchemy.schemar   sqlalchemy.sql.elementsr   r   sqlalchemy.sql.functionsr   sqlalchemy.typesr   baser   r   r   r   r    r!   r"   r#   r$   rA  r%   r&   rb   r(   autogenerater)   ri  r*   r+   operations.baser,   r-   r.   util.sqla_compatr/   r0   r1   r2   $sqlalchemy.dialects.postgresql.arrayr3   #sqlalchemy.dialects.postgresql.baser4   %sqlalchemy.dialects.postgresql.hstorer5   #sqlalchemy.dialects.postgresql.jsonr6   r7   r8   r9   r:   sqlalchemy.sql.schemar;   r<   sqlalchemy.sql.type_apir=   r>   autogenerate.apir?   autogenerate.renderr@   runtime.migrationrA   	getLoggerr"  r   rC   r   r1  r3  r<  r@  register_operationAddConstraintOpregister_add_constraintrN  	renderersdispatch_forrr  _constraint_renderersrw  r{  rq  r  rH   rW   rU   <module>r     s   #  	             %   ( 1 < 2 ) 0 . 4 %     $ #  '  "   !  " - (  ' +:A<89553.+2$1-4 g!g
[ g
T;  
+|$$1 % 

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

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

 	
rW   