
    ht                    x   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/m0Z0 d%d'l1m2Z2 d%d(l3m4Z4 d%d)l3m5Z5 d%d*l6m7Z7 d%d+l6m8Z8 d%d,l0m9Z9 d%d-l:m;Z; erld d.lm<Z< d d/lm=Z= d d0lm>Z> d d1l?m@Z@ d d2lAmBZB d d3lCmDZD d d4lEmFZF d d5lEmGZG d d6lmHZH d d7lmIZI d d8lmJZJ d d9lKmLZL d d:lKmMZM d d;lNmOZO dd<l"mPZP d%d=lQmRZR d%d>lSmTZT d%d?lUmVZV  ej                  eX      ZY G d@ dAe.      ZZ G dB dCe%      Z[ e;e+dD      	 	 	 	 	 	 dSdE       Z\ e;e[dD      	 	 	 	 	 	 dTdF       Z] e;e&dD      	 	 	 	 	 	 dUdG       Z^ e;e*dD      	 	 	 	 dVdH       Z_ e8j                  dI       e7j                  dIdJ      e4j                  j                  dK       G dL dMe4j                                             Zce2j                  j                  ec      	 	 	 	 	 	 dWdN       Zfe2j                  j                  e      	 	 	 	 	 	 	 	 dXdO       ZhdYdPZi	 	 	 	 	 	 	 	 dZdQZj	 	 	 	 	 	 d[dRZky)\    )annotationsN)Any)cast)Dict)List)Optional)Sequence)Tuple)TYPE_CHECKING)Union)Column)literal_column)Numeric)text)types)BIGINT)ExcludeConstraint)INTEGER)CreateIndex)ColumnClause)
TextClause)FunctionElement)NULLTYPE   )alter_column)alter_table)AlterColumn)ColumnComment)format_column_name)format_table_name)format_type)IdentityColumnDefault)RenameTable)ComparisonResult)DefaultImpl   )util)render)ops)	schemaobj)BatchOperations)
Operations)sqla_compat)compiles)Literal)Index)UniqueConstraint)ARRAY)PGDDLCompiler)HSTORE)JSON)JSONB)ClauseElement)ColumnElement)quoted_name)MetaData)Table)
TypeEngine)_ServerDefault)AutogenContext)_f_name)MigrationContextc                  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kwrF   cols        a/var/www/html/retail-simulation-api/retail/lib/python3.12/site-packages/alembic/ddl/postgresql.pycreate_indexzPostgresqlImpl.create_indexU   su     #\\--.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)rP   
batch_implrJ   
constraints       rT   prep_table_for_batchz#PostgresqlImpl.prep_table_for_batcha   s<    ++J+OOz'C'CC$$Z0 ,rV   c                   |j                   r||j                  j                  u ry|}||k(  }|ryd |||j                  fv r| S |j                  j                  }t        |t              rBt        |j                  t              st        j                  dd|      }d| d}t        |      }| j                  }|J |j                  t        j                  t        |      |k(               S )NFz^'|'$ ')primary_keyrJ   _autoincrement_columnserver_defaultarg
isinstancestrtyper   resubr   
connectionscalarr-   _select)	rP   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaultconn_col_defaultdefaults_equalmetadata_defaultconns	            rT   compare_server_defaultz%PostgresqlImpl.compare_server_defaulti   s    ''?#8#8#N#NN5)-FF%**
 

 &%%*99==&,.33W=#%66(B8H#I %&'7&8#: -.>? ;;/04DD
 
 	
rV   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)	nullablere   rZ   rz   autoincrementr|   r}   r~   existing_autoincrement)popr'   CommandErrorrO   PostgresqlColumnTypesuperr   )rP   
table_namecolumn_namer   re   rZ   type_rz   r   r|   r}   r~   r   rR   r{   	__class__s                  rT   r   zPostgresqlImpl.alter_column   s      )40##H  JJ$!"/,C&7	 		
 )''$;/#9	
 	
rV   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defaultri   znextval\('(.+?)'::regclass\)a+  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.relname=:seqnamer   )seqnamerZ   z^Detected sequence named '%s' as owned by integer column '%s(%s)', assuming SERIAL and omitting)rI   rg   r   r   rj   matchr-   _exec_on_inspectorr   groupfirstloginforZ   )rP   	inspectorrJ   column_info	seq_matchr   r   colnames           rT   autogen_column_reflectz%PostgresqlImpl.autogen_column_reflect   s    ??9%*'6!2+
 /Y1GI "55E
 &OOA. %'  '+$GW+f"55; $!JJ# (	2 6 ! +
%rV   c                    |D ch c]  }|j                   j                  d      r|! }}|D ]  }|j                  |        t        j                  s| j                  ||       y y c c}w )Nduplicates_constraint)r   rI   remover-   sqla_2_skip_functional_indexes)rP   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexesrQ   doubled_constraintsixs           rT   correct_for_autogen_constraintsz.PostgresqlImpl.correct_for_autogen_constraints   su     &
%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"ra   rb   .z::z(::[\w ]+\w)r   ()r   z	cast\s*\(zas\s+[^)]+\) )lowerreplacerJ   rZ   rj   rk   _default_modifiers_researchspancompiler   )rP   rQ   exprrsr   startendcast_res           rT   _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$rV   c                <    |j                   j                  d      ryy)Npostgresql_nulls_not_distinct)nulls_not_distinctrG   )dialect_kwargsrI   )rP   items     rT   _dialect_optionszPostgresqlImpl._dialect_options8  s    
 ""#BC*rV   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'   warnrZ   r   extendSkipEqual)rP   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                    rT   compare_indexeszPostgresqlImpl.compare_indexesA  s   
 //O

 JJz" ,,!--w<3w<'JJ+CL>c'l^LM#--c22(Wg)>BOC#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  C8 )).9	))/:		!JJ)D<=#--c22#((..#))++rV   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   )	rP   metadata_constraintreflected_constraintmetadata_tupreflected_tupmeta_sigconn_sigmetadata_doconn_dos	            rT   compare_unique_constraintz(PostgresqlImpl.compare_unique_constraint}  s    
 ;;
 == 
  '' ((x#--hZtH:6  ++L,>,>?''(;(;<'!#--gYd;-8   %%''rV   c                    |j                  di       j                         }|j                  d      s|j                  dd        |S )Ndialect_optionsrF   )rI   copyr   )rP   reflected_optionskindoptionss       rT    adjust_reflected_dialect_optionsz/PostgresqlImpl.adjust_reflected_dialect_options  sA     $''(92>CCE{{/0KK,d3rV   c                z    t        |t              r|S |j                  | j                  ddd      j                  S )NTF)literal_bindsinclude_table)dialectcompile_kwargs)rg   rh   r   r   string)rP   elements     rT   r   zPostgresqlImpl._compile_element  s=    gs#NLL-1EJ  
 &	rV   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)rg   r   
self_groupr   render_ddl_sql_expr)rP   r   r   r   rR   r   s        rT   r   z"PostgresqlImpl.render_ddl_sql_expr  sD      Jt\:??$Dw*
$5
LN
 	
rV   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)ri   
__module__
startswithhasattr__visit_name__getattr)rP   r   autogen_contextmodmeths        rT   render_typezPostgresqlImpl.render_type  sa     5k$$~~>?4*U-A-AAB4!2U5I5I!IJD//rV   c           	     N    t        t        t        j                  ||dd            S )N	text_typez(.+?\(.*text_type=)r   rh   r(   _render_type_w_subtyperP   r   r  s      rT   _render_HSTORE_typez"PostgresqlImpl._render_HSTORE_type  s,     ))5K
 	
rV   c           	     N    t        t        t        j                  ||dd            S )N	item_typez(.+?\()r  r  s      rT   _render_ARRAY_typez!PostgresqlImpl._render_ARRAY_type  s+     ))Z
 	
rV   c           	     N    t        t        t        j                  ||dd            S Nastext_typez(.+?\(.*astext_type=)r  r  s      rT   _render_JSON_typez PostgresqlImpl._render_JSON_type  ,     ))7O
 	
rV   c           	     N    t        t        t        j                  ||dd            S r  r  r  s      rT   _render_JSONB_typez!PostgresqlImpl._render_JSONB_type  r  rV   )rQ   r0   rR   r   returnNone)
NFNNNNNNNN)r   rh   r   rh   r   Optional[bool]re   z%Union[_ServerDefault, Literal[False]]rZ   Optional[str]r   Optional[TypeEngine]rz   r  r   r  r|   r  r}   zOptional[_ServerDefault]r~   r  r   r  rR   r   r  r  )rQ   r0   r   rh   r  rh   )r   zUnion[Index, UniqueConstraint]r  zTuple[Any, ...])r   r0   r   r0   r  r$   )r   r1   r   r1   r  r$   )r   Dict[str, Any]r   rh   r  r  )r   zUnion[ClauseElement, str]r  rh   )FF)
r   r7   r   boolr   r   rR   r   r  rh   )r   r<   r  r>   r  zUnion[str, Literal[False]])r   r4   r  r>   r  rh   )r   r2   r  r>   r  rh   )r   r5   r  r>   r  rh   )r   r6   r  r>   r  rh   )__name__r  __qualname____dialect__transactional_ddlr%   type_synonymsrU   r_   rw   r   r   r   rj   r   r   r   r   r   r   r   r   r   r	  r  r  r  r  __classcell__r   s   @rT   rB   rB   N   s   K--	$%1 M
-1+
b $(@E"&* $(,.2<@,0152
2
 2
 !	2

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

'(

-.

9

()

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

 
 

.2@	#

.<
	


-;
	


,:
	


-;
	
rV   rB   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__rM   to_instancer   r{   )rP   rZ   r   r   rR   r{   r   s         rT   r*  zPostgresqlColumnType.__init__  sB     w%{1b1))%0

rV   )rZ   rh   r   rh   r   r<   r  r  )r!  r  r"  r*  r&  r'  s   @rT   r   r     s-    &)2<	 rV   r   rC   c                x    t        || j                  | j                        dt        || j                  d       S )Nz RENAME TO )r   r   rz   r    new_table_namer   compilerrR   s      rT   visit_rename_tabler0    s6    
 	Hg00'..A(G$:$:DA rV   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 %sra   )r   r   rz   r   r   r!   r   r{   r.  s      rT   visit_column_typer2    sn    
 	Hg00'..AXw223K'--88&-mm
W]]";	  :<;	 rV   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)r5  sql_compilerrender_literal_valuerM   Stringformatr    r   rz   r   r   )r   r/  rR   ddlr5  s        rT   visit_column_commentr;    s     FC
 ??& 	22OOX__.	
   ::$g(('..
 'x1D1DE   rV   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 rG   )r   r   rz   r   r   r   r}   visit_identity_columnimpl_compare_identity_defaultsortedr=  get_identity_optionsr-   Identityr  )r   r/  rR   r   diff_identityattrs           rT   r?  r?  -  s,   
 	Hg00'..AXw223D 		(	(	0..w?? \\;;OOW<<

a ??4LDx+ (H\  	H$A$A((KD'(D2I+JK%   ! rV   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 rX   )constraint_namer   elementswhererz   _orig_constraintrR   )rP   rP  r   rQ  rR  rz   rS  rR   s           rT   r*  z"CreateExcludeConstraintOp.__init__Z  s7      /$ 
 0rV   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)rR  rz   rS  
deferrable	initiallyr{   )
r-   _table_for_constraintrZ   _render_exprsr   rR  rz   rU  rV  r{   )clsr^   constraint_tabler   rZ   ops         rT   from_constraintz)CreateExcludeConstraintOp.from_constrainto  s     '<<ZHOO!!1;1I1I1I~tT2r
1I 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)rz   )rZ   rR  )rS  r*   SchemaObjectsrJ   r   rz   r   rQ  rP  rR  rR   rX  rL   r   r   append_constraint)rP   migration_context
schema_objtexclr   rZ   opers           rT   to_constraintz'CreateExcludeConstraintOp.to_constraint  s       ,(((,,->?
T__T[[A ]]%%**
 gg	
 	
OOF423  	D!rV   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)rY  
operationsrP  r   rQ  rR   r[  s          rT   rI  z3CreateExcludeConstraintOp.create_exclude_constraint  s)    V *h="=  $$rV   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`

        rz   )r@  rz   r   rg  )rY  rh  rP  rQ  rR   r[  s         rT   rJ  z9CreateExcludeConstraintOp.batch_create_exclude_constraint  sE    & "--8*//"<"<hM"M  $$rV   )NNN)rP  zsqla_compat._ConstraintNamer   zUnion[str, quoted_name]rQ  zIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]rR  z)Optional[Union[ColumnElement[bool], str]]rz   r  rS  zOptional[ExcludeConstraint]r  r  )r^   r   r  rM  rX   )r`  zOptional[MigrationContext]r  r   )rh  r,   rP  rh   r   rh   rQ  r   rR   r   r  Optional[Table])
rh  r+   rP  rh   rQ  r   rR   r   r  rj  )r!  r  r"  __doc__constraint_typer*  classmethodr\  re  rI  rJ  rG   rV   rT   rM  rM  P  s3    ;O <@ $8<4 ,
	 9  6 
* 
*
	"
 
& ?C!;	, +%+% +% 	+%
 +% +% 
+% +%Z %#% % 	%
 % 
% %rV   rM  c                :    t        |j                         | d      S )NT)alter)_exclude_constraintre  )r  r[  s     rT   _add_exclude_constraintrq    s     r//1?$OOrV   c                V    t        j                  d| |      }|dur|S t        | |d      S )NrN  F)r(   _user_defined_renderrp  )r^   r  namespace_metadatarendereds       rT   !_render_inline_exclude_constraintrv    s9     **:H uz?EBBrV   c                B    | j                   }||j                  d       y)Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)importsadd)r  rx  s     rT   _postgresql_autogenerate_prefixrz    s#    %%G@ArV   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 )NrU  rV  r{   rz   rZ   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=)rX  _render_potential_columnrR  r   r(   _render_potential_exprr   )	sqltextrZ   opstringargskvr  r^   optss	         rT   do_expr_where_optsz/_exclude_constraint.<locals>.do_expr_where_opts  s     ,6+C+C

 ,D'x )#  ,D 	 

 '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_batchrU  r   rh   rV  r{   rJ   rz   r(   _identrZ   _render_gen_namereprr   _alembic_autogenerate_prefixjoinrz  )r^   r  ro  	has_batchr  r  r  s   ``    @rT   rp  rp    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:
 
 	
rV   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  rZ   )wrap_in_text)	rg   r   
is_literalr(   _sqlalchemy_autogenerate_prefixrZ   r  r   r   )valuer  templates      rT   r  r  :  sr     %&;H3H<<_MJJ
 
 	

 ,,#EJ+HI
 	
rV   )r   r#   r/  r3   r  rh   )r   r   r/  r3   r  rh   )r   r   r/  r3   r  rh   )r   r"   r/  r3   )r  r>   r[  rM  r  rh   )r^   r   r  r>   rt  r:   r  rh   )r  r>   r  rh   )r^   r   r  r>   ro  r   r  rh   )r  zGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]r  r>   r  rh   )l
__future__r   loggingrj   typingr   r   r   r   r   r	   r
   r   r   
sqlalchemyr   r   r   r   r   rM   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#   r@  r$   r%   ra   r'   autogenerater(   rh  r)   r*   operations.baser+   r,   r-   util.sqla_compatr.   r/   r0   r1   $sqlalchemy.dialects.postgresql.arrayr2   #sqlalchemy.dialects.postgresql.baser3   %sqlalchemy.dialects.postgresql.hstorer4   #sqlalchemy.dialects.postgresql.jsonr5   r6   r7   r8   r9   sqlalchemy.sql.schemar:   r;   sqlalchemy.sql.type_apir<   r=   autogenerate.apir>   autogenerate.renderr?   runtime.migrationr@   	getLoggerr!  r   rB   r   r0  r2  r;  r?  register_operationAddConstraintOpregister_add_constraintrM  	renderersdispatch_forrq  _constraint_renderersrv  rz  rp  r  rG   rV   rT   <module>r     s
   #  	            %   ( 1 < 2 ) 0 . 4 %     $ #  '  "   !  " - (  ' +:A<89553.+2$1-4 g!f
[ f
R;  
+|$$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<
!<
#<
 <
 		<
~

 $	

 	
rV   