
    Ojv                       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          djdO            Z` e>e_dH          dkdP            Za e>e)dH          dldR            Zb e>e-dH          dmdT            Zc e;jd        dU           e:jd        dUdV          e7je        f                    dW           G dX dYe7je                                                      Zge5jh        i                    eg          dnd]            Zje5jk        i                    e          dodb            ZldpdcZmdqdfZndrdiZodS )s    )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                  ~    e Zd ZdZdZej        ddhfz   ZdRdZd Zd Z	ddddddddddd
dS fd"Z
d# Zd$ Z ej        d%           ej        d&           ej        d'           ej        d(           ej        d)          fZdTd+ZdUd/ZdVd3ZdWd7ZdXd<ZdYd?Z	 	 dZd[ fdDZd\dIZd]dKZd^dMZd_dOZd`dQZ xZS )aPostgresqlImpl
postgresqlTFLOATzDOUBLE PRECISIONindexr3   kwr   returnNonec                
   |j                             dd           pd}|D ]B}||j        j        vr2|j                            t          |t          j                             C|                     t          |fi |           d S )Npostgresql_include )
kwargsgettablecappend_columnr   sqltypesNullType_execr   )selfrI   rJ   rN   cols        j/lsinfo/ai/hellotax_ai/training_center/backend/venv/lib/python3.11/site-packages/alembic/ddl/postgresql.pycreate_indexzPostgresqlImpl.create_indexY   s     #\--.BDIIOR% 	 	C%+-''))3 122   	

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

 &%%*9=&,, 	@.3gu5EFF ;#%6(B8H#I#I #:'7#:#:#: -.>??
 ;;>"2337GGHH
 
 
 	
r\   NF)
nullablero   r`   type_schemaautoincrementexisting_typeexisting_server_defaultexisting_nullableexisting_autoincrement
table_namerr   column_namer   Optional[bool]ro   3Optional[Union[_ServerDefaultType, Literal[False]]]r`   Optional[str]r   Optional[TypeEngine]r   r   r   r   r   r   c       
           |                     dd           }||t          j        d          |*|                     t	          ||||||	|
|                      t                      j        ||f||||||	|
||d	| d S )Npostgresql_usingz6postgresql_using must be used with the type_ parameter)r   usingr   r   r   )	r   ro   r`   r   r   r   r   r   r   )popr*   CommandErrorrW   PostgresqlColumnTypesuperr   )rX   r   r   r   ro   r`   r   r   r   r   r   r   r   rJ   r   	__class__s                  rZ   r   zPostgresqlImpl.alter_column   s    * )400#H   JJ$!"/,C&7	 	 	   		
 )''$;/#9	
 	
 	
 	
 	
 	
 	
r\   c                   |                     d          rt          |d         t          t          f          rt	          j        d|d                   }|rt          j        |t          d          |	                    d                    
                                }|r>|\  }}||d         k    r/t                              d||j        |           |d= d S d S d S d S d S d S )	Ndefaultrs   rg   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)rQ   rq   r   r   rl   rm   r0   _exec_on_inspectorr   groupfirstloginfor`   )rX   	inspectorrR   column_info	seq_matchr   r   colnames           rZ   autogen_column_reflectz%PostgresqlImpl.autogen_column_reflect   s3   ??9%% $	3*'6!2+
 +
 $	3 /Y1G I  3"5	;  &OOA..   %''    3'+$GW+f"555; $!J#   (	222I$	3 $	3 $	3 $	33 3"3 355r\   c                    d |D             }|D ]}|                     |           t          j        s|                     ||           d S d S )Nc                F    h | ]}|j                             d           |S )duplicates_constraint)r   rQ   ).0rI   s     rZ   	<setcomp>zAPostgresqlImpl.correct_for_autogen_constraints.<locals>.<setcomp>  s=     
 
 
z~~566

 
 
r\   )remover0   sqla_2_skip_functional_indexes)rX   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexesdoubled_constraintsixs          rZ   correct_for_autogen_constraintsz.PostgresqlImpl.correct_for_autogen_constraints   s~    
 
%
 
 
 & 	$ 	$B####! 	J))*:LIIIII	J 	Jr\   z( asc nulls last)$z(?<! desc)( nulls last)$z( asc)$z( asc) nulls first$z desc( nulls first)$exprc                   |                                                     dd                              dd          }|j        5|                    |j        j                                          dd          }d|v rt	          j        dd|          }|r<|d         dk    r0|d	         d
k    r$|dd	         }|r|d         dk    r|d	         d
k    $| j        D ]H}|                    |          x}r/|                    d          \  }}|d |         ||d          z   } nI|r<|d         dk    r0|d	         d
k    r$|dd	         }|r|d         dk    r|d	         d
k    $t	          j	        d          }|
                    |          r,|                    d|          }t	          j        dd|          }|                    dd          }|S )N"rh   ri   .z::z(::[\w ]+\w)r   ()r   z	cast\s*\(zas\s+[^)]+\) )lowerrn   rR   r`   rl   rt   _default_modifiers_researchspancompilerm   )rX   rI   r   rsrm   startendcast_res           rZ   _cleanup_index_exprz"PostgresqlImpl._cleanup_index_expr&  s   zz||##C,,44S"==;"<<5;#3#9#9#;#; > > >CCD4<<6/2t44D 	tAw#~~$r(c//":D  	tAw#~~$r(c//
 , 	 	B		$'u "ZZ]]
sFUF|d344j0
  	tAw#~~$r(c//":D  	tAw#~~$r(c// *\**== 	5;;r4((D6/2t44D||C$$r\   itemUnion[Index, UniqueConstraint]Tuple[Any, ...]c                >    |j                             d          rdS dS )Npostgresql_nulls_not_distinct)nulls_not_distinctrO   )dialect_kwargsrQ   )rX   r   s     rZ   _dialect_optionszPostgresqlImpl._dialect_optionsH  s)    
 ""#BCC 	+**rr\   metadata_indexreflected_indexr'   c           
        g }|                      ||          }|r|                    |           |j        }|j        }t          |          t          |          k    r5|                    dt          |           dt          |                      |rt	          j        |          S g }t          t          ||          d          D ]\  }\  }	}
|                     |	          }| 	                    ||          }|                     |
          }| 	                    ||          }||k    re|
                                                    d          rHd|v sd|v r@|                    d| d|d           t          j        d	| d|d
|j        d           |                    d| d|d|           |                     |          }|                     |          }||k    r|                    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)rX   r   r   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                    rZ   compare_indexeszPostgresqlImpl.compare_indexesQ  s   
 //O
 

  	#JJz""" ,!-w<<3w<<''JJLCLLLLc'llLLMMM 	3#-c222(Wg)>)>BB 	P 	POC#s--c22I--niHHF--c22I--niHHF""++F33 Py  C9$4$443 4 4 4 4 4   	f3 f f f f&+f f f    

N#NN	NNNNOOOO)).99	))/::		!!JJ<)<<<<=== 	,#-c222 	,#(...#)+++r\   metadata_constraintr4   reflected_constraintc                   |                      |          }|                     |          }|j        }|j        }||k    rt          j        d| d|           S |                     |j                  }|                     |j                  }||k    rt          j        d| d|           S t          j                    S )Nzexpression r   )_create_metadata_constraint_sig _create_reflected_constraint_sigunnamedr'   r   r   constr   )	rX   r   r   metadata_tupreflected_tupmeta_sigconn_sigmetadata_doconn_dos	            rZ   compare_unique_constraintz(PostgresqlImpl.compare_unique_constraint  s    
 ;;
 
 == 
 
  ' (x#-6h66H66   ++L,>??''(;<<'!!#-8g88;88    %'''r\   reflected_objectrA   kindDict[str, Any]c                    |                     di                                           }|                     d          s|                    dd            |S )Ndialect_optionsrN   )rQ   copyr   )rX   r   r   optionss       rZ    adjust_reflected_dialect_optionsz/PostgresqlImpl.adjust_reflected_dialect_options  sU     #&&'8"==BBDD{{/00 	4KK,d333r\   elementUnion[ClauseElement, str]c                x    t          |t                    r|S |                    | j        ddd          j        S )NTF)literal_bindsinclude_table)dialectcompile_kwargs)rq   rr   r   r	  string)rX   r  s     rZ   r   zPostgresqlImpl._compile_element  sI    gs## 	NL-1EJJ  
 
 	r\   r:   is_server_defaultboolis_indexc                    |r)t          |t                    s|                                } t                      j        |f||d|S )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        )r  r  )rq   r   
self_groupr   render_ddl_sql_expr)rX   r   r  r  rJ   r   s        rZ   r  z"PostgresqlImpl.render_ddl_sql_expr  sb       	%Jt\:: 	%??$$D*uww*
$5
 
LN
 
 	
r\   r?   autogen_contextrB   Union[str, Literal[False]]c                    t          |          j        }|                    d          sdS t          | d|j        z            r$t          | d|j        z            } |||          S dS )Nzsqlalchemy.dialects.postgresqlFz_render_%s_type)rs   
__module__
startswithhasattr__visit_name__getattr)rX   r   r  modmeths        rZ   render_typezPostgresqlImpl.render_type  sv     5kk$~~>?? 	54*U-AABB 	04!2U5I!IJJD4///ur\   r7   c           	     V    t          t          t          j        ||dd                    S )N	text_typez(.+?\(.*text_type=)r   rr   r+   _render_type_w_subtyperX   r   r  s      rZ   _render_HSTORE_typez"PostgresqlImpl._render_HSTORE_type  s3     )5K 
 
 	
r\   r5   c           	     V    t          t          t          j        ||dd                    S )N	item_typez(.+?\()r  r!  s      rZ   _render_ARRAY_typez!PostgresqlImpl._render_ARRAY_type  s2     )Z 
 
 	
r\   r8   c           	     V    t          t          t          j        ||dd                    S Nastext_typez(.+?\(.*astext_type=)r  r!  s      rZ   _render_JSON_typez PostgresqlImpl._render_JSON_type  3     )7O 
 
 	
r\   r9   c           	     V    t          t          t          j        ||dd                    S r'  r  r!  s      rZ   _render_JSONB_typez!PostgresqlImpl._render_JSONB_type  r*  r\   )rI   r3   rJ   r   rK   rL   )r   rr   r   rr   r   r   ro   r   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rJ   r   rK   rL   )rI   r3   r   rr   rK   rr   )r   r   rK   r   )r   r3   r   r3   rK   r'   )r   r4   r   r4   rK   r'   )r   rA   r   rr   rK   r   )r  r  rK   rr   )FF)
r   r:   r  r  r  r  rJ   r   rK   rr   )r   r?   r  rB   rK   r  )r   r7   r  rB   rK   rr   )r   r5   r  rB   rK   rr   )r   r8   r  rB   rK   rr   )r   r9   r  rB   rK   rr   )__name__r  __qualname____dialect__transactional_ddlr(   type_synonymsr[   re   r   r   r   r   rl   r   r   r   r   r   r   r  r   r  r  r"  r%  r)  r,  __classcell__r   s   @rZ   rF   rF   R   sI       K-	$%1 M
- 
- 
- 
-1 1 11
 1
 1
p $( "&* $(,.2 ,015%7
 7
 7
 7
 7
 7
 7
 7
r%3 %3 %3NJ J J> 	
'((
-..
9
())
)**       D   :, :, :, :,x( ( ( (8       #(	
 
 
 
 
 
 
.   
 
 
 

 
 
 

 
 
 

 
 
 
 
 
 
 
r\   rF   c                        e Zd Zd	 fdZ xZS )
r   r`   rr   r   r   r?   rK   rL   c                    |                     dd           } t                      j        ||fi | t          j        |          | _        || _        d S )Nr   )r   r   __init__rU   to_instancer   r   )rX   r`   r   r   rJ   r   r   s         rZ   r6  zPostgresqlColumnType.__init__  sV     w%%{11b111)%00



r\   )r`   rr   r   rr   r   r?   rK   rL   )r-  r  r.  r6  r2  r3  s   @rZ   r   r     s=                 r\   r   rG   r  r&   compilerr6   rK   rr   c                j    t          || j        | j                  dt          || j        d           S )Nz RENAME TO )r   r   r   r#   new_table_namer  r8  rJ   s      rZ   visit_rename_tabler<    s=    
 	Hg0'.AAAA(G$:DAAA r\   c           	         t          || j        | j                  dt          || j                  ddt          || j                  z  d| j        r
d| j        z  ndS )Nr   zTYPE %szUSING %srh   )r   r   r   r   r   r$   r   r   r;  s      rZ   visit_column_typer>    sq    
 	Hg0'.AAAAXw23333K'-88888&-m;
W]"";	 r\   r!   c                   d}| j         1|j                            | j         t          j                              nd}|                    t          || j        | j                  t          || j
                  |          S )Nz9COMMENT ON COLUMN {table_name}.{column_name} IS {comment}NULL)r   r   comment)rA  sql_compilerrender_literal_valuerU   Stringformatr#   r   r   r"   r   )r  r8  rJ   ddlrA  s        rZ   visit_column_commentrG  '  s     FC
 ?& 	22OX_..	
 	
 	
   ::$g('.
 
 'x1DEE    r\   r%   c                   t          || j        | j                  dt          || j                  d}| j        |dz  }|S | j        $|dz  }||                    | j                  z  }|S | j        	                    | j        | j                  \  }}}| j        }t          |          D ]O}|dk    r|d|j        rdndz  z  }|d|                    t          d	i |t          ||          i          z  z  }P|S )
Nr   zDROP IDENTITYzADD alwayszSET GENERATED %s ALWAYSz
BY DEFAULTzSET %s rO   )r   r   r   r   r   r   r   visit_identity_columnimpl_compare_identity_defaultsortedrI  get_identity_optionsr   r  )r  r8  rJ   r   diff_identityattrs           rZ   rK  rK  =  sG   
 	Hg0'.AAAAXw23333D 		(	0..w??? \;;OW<
 

a ?4LL 	 	Dx+ (AHH\  	H$A$A??gh&=&=>??% %   r\   create_exclude_constraintbatch_create_exclude_constraintexclude_constraintc                  z    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
dS ))CreateExcludeConstraintOpz0Represent a create exclude constraint operation.excludeNconstraint_namesqla_compat._ConstraintNamer   Union[str, quoted_name]elementsIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]where)Optional[Union[ColumnElement[bool], str]]r   r   _orig_constraintOptional[ExcludeConstraint]rK   rL   c                h    || _         || _        || _        || _        || _        || _        || _        d S r^   )rZ  r   r]  r_  r   ra  rJ   )rX   rZ  r   r]  r_  r   ra  rJ   s           rZ   r6  z"CreateExcludeConstraintOp.__init__j  s;      /$ 
 0r\   rd   r   c                    t          j        |          } | |j        |j        d |j        D             t	          d|j                  |j        ||j        |j        |j	        	  	        S )Nc                    g | ]
\  }}}||fS rO   rO   )r   r   r`   ops       rZ   
<listcomp>z=CreateExcludeConstraintOp.from_constraint.<locals>.<listcomp>  s/       -tT2r
  r\   zColumnElement[bool] | None)r_  r   ra  
deferrable	initiallyr   )
r0   _table_for_constraintr`   _render_exprsr   r_  r   rh  ri  r   )clsrd   constraint_tables      rZ   from_constraintz)CreateExcludeConstraintOp.from_constraint  s     '<ZHHsO! 1;1I   3Z5EFF#*'!, *"
 
 
 	
r\   migration_contextOptional[MigrationContext]c                h   | j         | j         S t          j        |          }|                    | j        | j                  }t          | j        | j        | j	        d| j
        }|j        D ].\  }}}|                    t          |t                               /|                    |           |S )N)r   )r`   r_  )ra  r-   SchemaObjectsrR   r   r   r   r]  rZ  r_  rJ   rk  rT   r   r   append_constraint)rX   ro  
schema_objtexclr   r`   opers           rZ   to_constraintz'CreateExcludeConstraintOp.to_constraint  s      ,((,->??
T_T[AA ]%*
 
 g	
 
 		4 	4 
OOF4223333	D!!!r\   
operationsr/   rr   r   rJ   Optional[Table]c                B     | |||fi |}|                     |          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)rl  ry  rZ  r   r]  rJ   rf  s          rZ   rT  z3CreateExcludeConstraintOp.create_exclude_constraint  s4    V S*h=="==  $$$r\   r.   c                t    |j         j        |d<    | ||j         j        |fi |}|                    |          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   )rL  r   r   r|  )rl  ry  rZ  r]  rJ   rf  s         rZ   rU  z9CreateExcludeConstraintOp.batch_create_exclude_constraint  sF    & "-8S*/"<hMM"MM  $$$r\   )NNN)rZ  r[  r   r\  r]  r^  r_  r`  r   r   ra  rb  rK   rL   )rd   r   rK   rX  r^   )ro  rp  rK   r   )ry  r/   rZ  rr   r   rr   r]  r   rJ   r   rK   rz  )
ry  r.   rZ  rr   r]  r   rJ   r   rK   rz  )r-  r  r.  __doc__constraint_typer6  classmethodrn  rx  rT  rU  rO   r\   rZ   rX  rX  `  s         ;:O <@ $8<    * 
 
 
 [
& ?C    , +% +% +% [+%Z % % % [% % %r\   rX  r  rB   rf  c                J    t          |                                | d          S )NT)alter)_exclude_constraintrx  )r  rf  s     rZ   _add_exclude_constraintr    s%     r//11?$OOOOr\   rd   r   namespace_metadatar=   c                \    t          j        d| |          }|dur|S t          | |d          S )NrY  F)r+   _user_defined_renderr  )rd   r  r  rendereds       rZ   !_render_inline_exclude_constraintr    sA     *: H uz?EBBBr\   c                B    | j         }||                    d           dS )Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)importsadd)r  r  s     rZ   _postgresql_autogenerate_prefixr    s(    %G@AAA=r\   r  r  c                    g j         } j        r)                    dt           j                  f            j        r)                    dt           j                  f            j        r)                    dt           j                  f           |sA|r? j        j        r3                    dt          j	         j        j                  f           |s6 j
        r/                    dt          j         j
                  f            fd}|rt          t          j         j
                            g}|s/|t          t          j	         j        j
                            gz  }|                     |                       dt          j                  d                    |          d	z  S  |            }d
t!                    d                    |          d	z  S )Nrh  ri  r   r   r`   c                     fdj         D             } j        0|                     dt          j        j                  z             |                     d D                        | S )Nc                F    g | ]\  }}}d t          |          d|dS )r   , r   )_render_potential_column)r   sqltextr`   opstringr  s       rZ   rg  zC_exclude_constraint.<locals>.do_expr_where_opts.<locals>.<listcomp>"  s[     

 

 

 (xx )#    

 

 

r\   zwhere=%sc                "    g | ]\  }}|d |S )=rO   )r   kvs      rZ   rg  zC_exclude_constraint.<locals>.do_expr_where_opts.<locals>.<listcomp>4  s'    777$!Q11%777r\   )rk  r_  r   r+   _render_potential_exprr   )argsr  rd   optss    rZ   do_expr_where_optsz/_exclude_constraint.<locals>.do_expr_where_opts!  s    

 

 

 

 ,6+C

 

 

 'KK/$o    	77$777888r\   z-%(prefix)screate_exclude_constraint(%(args)s)r  )prefixr  z%%(prefix)sExcludeConstraint(%(args)s))
_has_batchrh  r   rr   ri  r   rR   r   r+   _identr`   _render_gen_namereprr   _alembic_autogenerate_prefixjoinr  )rd   r  r  	has_batchr  r  r  s   ``    @rZ   r  r    s/   
 FHD*I @\3z'<#=#=>??? >[#j&:";";<=== 6Wc*"2334555 H H:#3#: HXv}Z-=-DEEFGGG 
Z_ 
V,_joNNO	
 	
 	
      ,  
(*/JJKK
  	AT&-
(8(=>>??@@D&&(()))>9/JJIIdOOB
 B
 
 	

 "!##65oFFIIdOO:
 :
 
 	
r\   valueGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]c           	         t          | t                    r+| 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)	rq   r   
is_literalr+   _sqlalchemy_autogenerate_prefixr`   r  r   r   )r  r  templates      rZ   r  r  J  s     %&& 
 	4;HH3H<_MMJ
 
 
 	

 ,&uz?.KLL
 
 
 	
r\   )r  r&   r8  r6   rK   rr   )r  r   r8  r6   rK   rr   )r  r!   r8  r6   rK   rr   )r  r%   r8  r6   )r  rB   rf  rX  rK   rr   )rd   r   r  rB   r  r=   rK   rr   )r  rB   rK   rr   )rd   r   r  rB   r  r  rK   rr   )r  r  r  rB   rK   rr   )p
__future__r   loggingrl   typingr   r   r   r   r   r	   r
   r   r   
sqlalchemyr   r   r   r   r   r   r   r   rU   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&   rL  r'   r(   rh   r*   autogenerater+   ry  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   r<  r>  rG  rK  register_operationAddConstraintOpregister_add_constraintrX  	renderersdispatch_forr  _constraint_renderersr  r  r  r  rO   r\   rZ   <module>r     s   # " " " " "  				                                                                               % % % % % %                   ( ( ( ( ( ( 1 1 1 1 1 1 < < < < < < 2 2 2 2 2 2 ) ) ) ) ) ) 0 0 0 0 0 0 . . . . . . 4 4 4 4 4 4 % % % % % %                         $ $ $ $ $ $ # # # # # #       ' ' ' ' ' '       " " " " " "             ! ! ! ! ! !       " " " " " " - - - - - - ( ( ( ( ( (       ' ' ' ' ' '  5      ++++++::::::AAAAAA<<<<<<888888999999555555555555333333......++++++222222((((((******111111------444444g!!r
 r
 r
 r
 r
[ r
 r
 r
j    ;    
+|$$   %$ 

--   .- 
-&&   '&* 

..   /.D :;;##!B  ,,-ABBF% F% F% F% F% 3 F% F% CB  <;
F%R 899P P P :9P **+<==C C C >=C   <
 <
 <
 <
~
 
 
 
 
 
r\   