
    PqhYg                       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*l6m7Z7 d'd+l6m8Z8 d'd,l9m:Z: d'd-l9m;Z; d'd.l3m<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 dBe1      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` e;j                  dJ       e:j                  dJdK      e7j                  j                  dL       G dM dNe7j                                             Zde5j                  j                  ed      	 	 	 	 	 	 dXdO       Zge5j                  j                  e      	 	 	 	 	 	 	 	 dYdP       ZidZdQZj	 	 	 	 	 	 	 	 d[dRZk	 	 	 	 	 	 d\dSZly)]    )annotationsN)Any)cast)Dict)List)Optional)Sequence)Tuple)TYPE_CHECKING)Union)Column)literal_column)Numeric)text)types)BIGINT)ExcludeConstraint)INTEGER)CreateIndex)	operators)ColumnClause)
TextClause)UnaryExpression)FunctionElement)NULLTYPE   )alter_column)alter_table)AlterColumn)ColumnComment)compiles)format_column_name)format_table_name)format_type)IdentityColumnDefault)RenameTable)DefaultImpl   )util)render)ops)	schemaobj)BatchOperations)
Operations)sqla_compat)Literal)Index)UniqueConstraint)ARRAY)PGDDLCompiler)HSTORE)JSON)JSONB)ClauseElement)ColumnElement)quoted_name)MetaData)Table)
TypeEngine)_ServerDefault)AutogenContext)_f_name)MigrationContextc                      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	 	 	 	 	 	 	 	 dd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        W/srv/www/ollama/chat-ollama/venv/lib/python3.12/site-packages/alembic/ddl/postgresql.pycreate_indexzPostgresqlImpl.create_indexS   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_batch_   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              rBt        |j                  t              st        j                  dd|      }d| d}t        |      }| j                  j                  t        j                  t        |      |k(               S )NFz^'|'$ ')primary_keyrK   _autoincrement_columnserver_defaultarg
isinstancestrtyper   resubr   
connectionscalarr/   _select)rQ   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaultconn_col_defaultdefaults_equalmetadata_defaults           rU   compare_server_defaultz%PostgresqlImpl.compare_server_defaultg   s     ''?#8#8#N#NN5)-FF%**
 

 &%%*99==&,.33W=#%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[   rz   autoincrementr|   r}   r~   existing_autoincrement)popr)   CommandErrorrP   PostgresqlColumnTypesuperr   )rQ   
table_namecolumn_namer   rf   r[   type_rz   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\)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   )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E
 &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'c                   |j                         j                  dd      j                  dd      }|j                  7|j                  |j                  j                  j                          dd      }|r(|d   dk(  r |d   dk(  r|d	d }|r|d   dk(  r	|d   dk(  rd
|v rt	        j
                  dd|      }|r |j                  |      r|d t        |        }|S )N"rb   rc   .r   ()r   z::z(::[\w ]+\w))lowerreplacerK   r[   rk   rl   endswithlen)rQ   rR   exprremove_suffixs       rU   _cleanup_index_exprz"PostgresqlImpl._cleanup_index_expr   s     zz|##C,44S"=;;"<<5;;#3#3#9#9#;"<A >CDtAw#~$r(c/":D tAw#~$r(c/4<66/2t4DT]]=9-3}--.D rW   c                   d}t        |t              r|j                  |j                  }n|j                  }t        |j                  t              r|j                  j                  }nd }|0|t        j
                  k(  rd}	 |S |t        j                  k(  rXd}	 |S |t        j
                  k(  r|t        j                  k(  rd}	 |S |t        j                  k(  r|t        j                  k(  rd}	 |S t        |t              r|S )Nrb   z ascz nulls lastz asc nulls lastz nulls first)	rh   r   modifierelementr   asc_opnullslast_opdesc_opnullsfirst_op)rQ   exp	to_removeopinner_ops        rU   _default_modifiersz!PostgresqlImpl._default_modifiers  s   	o.||#kk\\ckk?;"{{33H#H#Y---$*	" # y555$1	  !I$4$44)"8"88 %6	  !I$5$55)"9"99 %3	= o.< rW   c                <    |j                   j                  d      ryy)Npostgresql_nulls_not_distinct)nulls_not_distinctrH   )dialect_kwargsrJ   )rQ   items     rU   _dialect_sigzPostgresqlImpl._dialect_sig6  s    
 ""#BC*rW   c                h     t         fdj                  D               j                        z   S )Nc              3     K   | ]K  } j                   gt        |t              r|d fn!j                  |      j	                  |      f  M yw)rb   N)r   rh   ri   _compile_elementr   ).0erR   rQ   s     rU   	<genexpr>z2PostgresqlImpl.create_index_sig.<locals>.<genexpr>@  sc      

  %D$$ "!S) G//2D4K4KA4NO

s   AA)tupleexpressionsr   )rQ   rR   s   ``rU   create_index_sigzPostgresqlImpl.create_index_sig?  s:     

 &&

 

 e$
% 
	%rW   c                    t        t        |j                  D cg c]  }|j                   c}            | j	                  |      z   S c c}w rY   )r   sortedcolumnsr[   r   )rQ   constrT   s      rU   create_unique_constraint_sigz+PostgresqlImpl.create_unique_constraint_sigL  sB     6CHH67
e$% 	%6s   A	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_optionsS  sA     $''(92>CCE{{/0KK,d3rW   c                V    |j                  | j                  ddd      j                  S )NTF)literal_bindsinclude_table)dialectcompile_kwargs)compiler   string)rQ   r   s     rU   r   zPostgresqlImpl._compile_element\  s.    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_exprb  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_typey  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]rz   r  r   r   r|   r  r}   zOptional[_ServerDefault]r~   r   r   r   rS   r   r   r   )rR   r1   r   ri   r   ri   r   ri   )r   r8   r   ri   )r   zUnion[Index, UniqueConstraint]r   Tuple[Any, ...])rR   r1   r   r  )r   r2   r   r  )r   Dict[str, Any]r   ri   r   r  )r   r8   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`   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   s   @rU   rC   rC   L   sB   K--	$%1 M
-1)
^ $(@E"&* $(,.2<@,0152
2
 2
 !	2

 >2
 2
 $2
 2
 &2
 ,2
 ":2
 *2
 !/2
 2
 
2
h$3LJ&"%69	* D2	%%%%	%!/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   rz   r#   new_table_namer   compilerrS   s      rU   visit_rename_tabler    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 )N zTYPE %szUSING %srb   )r   r   rz   r   r   r$   r   r{   r  s      rU   visit_column_typer    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)r  sql_compilerrender_literal_valuerN   Stringformatr#   r   rz   r"   r   )r   r  rS   ddlr  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   rz   r   r   r   r}   visit_identity_columnimpl_compare_identity_defaultr   r#  get_identity_optionsr/   Identityr   )r   r  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whererz   _orig_constraintrS   )rQ   r5  r   r6  r7  rz   r8  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)r7  rz   r8  
deferrable	initiallyr{   )
r/   _table_for_constraintr[   _render_exprsr   r7  rz   r:  r;  r{   )clsr_   constraint_tabler   r[   r   s         rU   from_constraintz)CreateExcludeConstraintOp.from_constraint'  s     '<<ZHOO!! '1&>&> "D$ 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)rz   )r[   r7  )r8  r,   SchemaObjectsrK   r   rz   r   r6  r5  r7  rS   r=  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)r>  
operationsr5  r   r6  rS   r   s          rU   r.  z3CreateExcludeConstraintOp.create_exclude_constraintQ  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`

        rz   )r&  rz   r   rK  )r>  rL  r5  r6  rS   r   s         rU   r/  z9CreateExcludeConstraintOp.batch_create_exclude_constraint  sE    & "--8*//"<"<hM"M  $$rW   )NNN)r5  zsqla_compat._ConstraintNamer   zUnion[str, quoted_name]r6  zIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]r7  z)Optional[Union[ColumnElement[bool], str]]rz   r  r8  zOptional[ExcludeConstraint]r   r   )r_   r   r   r2  rY   )rD  zOptional[MigrationContext]r   r   )rL  r.   r5  ri   r   ri   r6  r   rS   r   r   zOptional[Table])rL  r-   r5  ri   r6  r   rS   r   )r  r   r  __doc__constraint_typer  classmethodr@  rI  r.  r/  rH   rW   rU   r2  r2    s)    ;O <@ $8<4 ,
	 9  6 
* 
*
	"
 
( ?C!;	, +%+% +% 	+%
 +% +% 
+% +%Z %#% % 	%
 % %rW   r2  c                :    t        |j                         | d      S )NT)alter)_exclude_constraintrI  )r   r   s     rU   _add_exclude_constraintrT    s     r//1?$OOrW   c                V    t        j                  d| |      }|dur|S t        | |d      S )Nr3  F)r*   _user_defined_renderrS  )r_   r   namespace_metadatarendereds       rU   !_render_inline_exclude_constraintrY    s9     **:H uz?EBBrW   c                B    | j                   }||j                  d       y)Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)importsadd)r   r[  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 )Nr:  r;  r{   rz   r[   c            
     T   j                   D  cg c]  \  } }}dt        |       d|d }}} }j                  2|j                  dt	        j
                  j                        z         |j                  D cg c]  \  }}|d| c}}       |S c c}}} w c c}}w )Nr   , r   zwhere=%s=)r=  _render_potential_columnr7  appendr*   _render_potential_exprextend)	sqltextr[   opstringargskvr   r_   optss	         rU   do_expr_where_optsz/_exclude_constraint.<locals>.do_expr_where_opts  s     ,6+C+C
 
 (x )/B
 
 'KK//$$o 	$7$!Q1%78!
 8s   BB$
z-%(prefix)screate_exclude_constraint(%(args)s)r`  )prefixrh  z%%(prefix)sExcludeConstraint(%(args)s))
_has_batchr:  rc  ri   r;  r{   rK   rz   r*   _identr[   _render_gen_namereprre  _alembic_autogenerate_prefixjoinr]  )r_   r   rR  	has_batchrl  rh  rk  s   ``    @rU   rS  rS    s   
 FHD**I\3z'<'<#=>?[#j&:&:";<=Wc*"2"2345:#3#3#:#:Xv}}Z-=-=-D-DEFGZ__V,,_jooNO	
& ((*//JK
 T&--
(8(8(=(=>?@@D&()>99/JIIdOB
 
 	

 "#65oFIIdO:
 
 	
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))rm  r[   )wrap_in_text)	rh   r   
is_literalr*   _sqlalchemy_autogenerate_prefixr[   rd  r   r   )valuer   templates      rU   rb  rb    sr     %&;H3H<<_MJJ
 
 	

 ,,#EJ+HI
 	
rW   )r   r&   r  r4   r   ri   )r   r   r  r4   r   ri   )r   r    r  r4   r   ri   )r   r%   r  r4   )r   r?   r   r2  r   ri   )r_   r   r   r?   rW  r;   r   ri   )r   r?   r   ri   )r_   r   r   r?   rR  r  r   ri   )ry  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   rN   sqlalchemy.dialects.postgresqlr   r   r   sqlalchemy.schemar   sqlalchemy.sqlr   sqlalchemy.sql.elementsr   r   r   sqlalchemy.sql.functionsr   sqlalchemy.typesr   baser   r   r   r    r!   r"   r#   r$   r%   r&   r&  r'   rb   r)   autogenerater*   rL  r+   r,   operations.baser-   r.   r/   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   r  r  r!  r%  register_operationAddConstraintOpregister_add_constraintr2  	renderersdispatch_forrT  _constraint_renderersrY  r]  rS  rb  rH   rW   rU   <module>r     s   "  	            %   ( 1 < 2 ) $ 0 . 3 4 %      $ #  '    !  " - (  +:A<89553.+2$1-4 g!`
[ `
F;  
+|$$1 % 

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

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

 	
rW   