Ë
    Ó~ïiÑv  ã                  ó¨  — 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«      	 	 	 	 	 	 dWdI„«       Z` e>e_dH«      	 	 	 	 	 	 dXdJ„«       Za e>e)dH«      	 	 	 	 	 	 dYdK„«       Zb e>e-dH«      	 	 	 	 dZdL„«       Zc e;jÈ                  dM«       e:jÈ                  dMdN«      e7jÊ                  jÍ                  dO«       G dP„ dQe7jÊ                  «      «       «       «       Zge5jÐ                  jÓ                  eg«      	 	 	 	 	 	 d[dR„«       Zje5jÖ                  jÓ                  e«      	 	 	 	 	 	 	 	 d\dS„«       Zld]dT„Zm	 	 	 	 	 	 	 	 d^dU„Zn	 	 	 	 	 	 d_dV„Zoy)`é    )Ú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                  óL  ‡ — 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	dddddddd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ÚkwrJ   Úcols        úm/var/www/acinvestment.org/public_html/aci/backend/venv/lib/python3.12/site-packages/alembic/ddl/postgresql.pyÚcreate_indexzPostgresqlImpl.create_indexY   sz   € ð #Ÿ\™\×-Ñ-Ð.BÀDÓIÒOÈRÐØ%ò 	ˆCØ˜%Ÿ+™+Ÿ-™-Ò'Ø—‘×)Ñ)Ü˜3¤× 1Ñ 1Ó2õð	ð
 	�
‰
”;˜uÑ+¨Ñ+Õ,ó    c                ó”   — |j                   D ]9  }|j                  €Œ|j                  |j                  v sŒ)| j                  |«       Œ; y ©N)ÚconstraintsÚnameÚnamed_constraintsÚdrop_constraint)rT   Ú
batch_implrN   Ú
constraints       rX   Úprep_table_for_batchz#PostgresqlImpl.prep_table_for_batche   sA   € Ø×+Ñ+ò 	1ˆJà—‘Ñ+Ø—O‘O z×'CÑ'CÒCà×$Ñ$ ZÕ0ñ	1rZ   c                ó&  — |j                   r||j                  j                  u ry|}|r(t        j                  d|«      r|j                  dd«      }||k(  }|ryd |||j                  fv r| S |j                  j                  }t        |t        «      rHt        |j                  t        t        f«      st        j                  dd|«      }d|› d�}t        |«      }| j                  }|€J ‚|j!                  t#        t        |«      |k(  «      «       S )NFúnextval\('(.+?)'::regclass\)z
::regclassÚ z^'|'$ú')Úprimary_keyrN   Ú_autoincrement_columnÚreÚmatchÚreplaceÚserver_defaultÚargÚ
isinstanceÚstrÚtyper   r   Úsubr   Ú
connectionÚscalarr   )	rT   Úinspector_columnÚmetadata_columnÚrendered_metadata_defaultÚrendered_inspector_defaultÚconn_col_defaultÚdefaults_equalÚmetadata_defaultÚconns	            rX   Úcompare_server_defaultz%PostgresqlImpl.compare_server_defaultm   s0  € ð ×'Ò'Ø ?×#8Ñ#8×#NÑ#NÑNàà5Ðá¤§¡Ø+Ð-=ô!
ð  0×7Ñ7¸ÀbÓIÐà)Ð-FÑFˆÙØàØØ%Ø×*Ñ*ð
ñ 
ð
 &Ð%Ð%à*×9Ñ9×=Ñ=ÐäÐ&¬Ô,ÜÐ.×3Ñ3´g¼uÐ5EÔFÜ#%§6¡6¨(°BÐ8HÓ#IÐ Ø%&Ð'7Ð&8¸Ð#:Ð ä-Ð.>Ó?Ðð
 �‰ˆØÐÐÐØ—;‘;Ü”>Ð"2Ó3Ð7GÑGÓHó
ð 
ð 	
rZ   NF)
Únullablerm   r^   Útype_ÚschemaÚautoincrementÚexisting_typeÚexisting_server_defaultÚexisting_nullableÚexisting_autoincrementc       
        óÚ   •— |j                  dd «      }|�|€t        j                  d«      ‚|�"| j                  t	        ||||||	|
|¬«      «       t        ‰| �  ||f||||||	|
||dœ	|¤Ž y )NÚpostgresql_usingz6postgresql_using must be used with the type_ parameter)r€   Úusingr‚   rƒ   r„   )	r~   rm   r^   r€   r�   r‚   rƒ   r„   r…   )Úpopr*   ÚCommandErrorrS   ÚPostgresqlColumnTypeÚsuperr   )rT   Ú
table_nameÚcolumn_namer~   rm   r^   r   r€   r�   r‚   rƒ   r„   r…   rV   rˆ   Ú	__class__s                  €rX   r   zPostgresqlImpl.alter_column    s«   ø€ ð* —‘Ð)¨4Ó0ˆàÐ  Ü×#Ñ#ØHóð ð ÐØ�J‰JÜ$ØØØØ!ØØ"/Ø,CØ&7ô	ôô 	‰ÑØØð	
ð Ø)ØØØ'Ø'Ø$;Ø/Ø#9ñ	
ð ó	
rZ   c                ó|  — |j                  d«      r«t        |d   t        t        f«      r‘t	        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Údefaultrq   re   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)rM   ro   r   r   rj   rk   r0   Ú_exec_on_inspectorr   ÚgroupÚfirstÚlogÚinfor^   )rT   Ú	inspectorrN   Úcolumn_infoÚ	seq_matchr—   r’   Úcolnames           rX   Úautogen_column_reflectz%PostgresqlImpl.autogen_column_reflectÙ   sÚ   € Ø�?‰?˜9Ô%¬*Ø˜Ñ¤'¬6Ð!2ô+
ô Ÿ™Ø/°¸YÑ1GóˆIñ Ü"×5Ñ5ØÜð	;óð &ŸO™O¨AÓ.ô÷ ‘%“'ð ñ  Ø'+Ñ$�G˜WØ +¨fÑ"5Ò5ÜŸ™ð;ð $Ø!ŸJ™JØ#ôð (¨	Ñ2ð 6ð ð# ð+
Ð%rZ   c                óØ   — |D �ch c]  }|j                   j                  d«      r|’Œ! }}|D ]  }|j                  |«       Œ t        j                  s| j                  ||«       y y c c}w )NÚduplicates_constraint)r—   rM   Úremover0   Úsqla_2Ú_skip_functional_indexes)rT   Úconn_unique_constraintsÚconn_indexesÚmetadata_unique_constraintsÚmetadata_indexesrU   Údoubled_constraintsÚixs           rX   Úcorrect_for_autogen_constraintsz.PostgresqlImpl.correct_for_autogen_constraints   sx   € ð &ö
àØ�z‰z�~‰~Ð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ú"rf   rg   ú.z::z(::[\w ]+\w)r   ú(éÿÿÿÿú)r   z	cast\s*\(zas\s+[^)]+\)ú )Úlowerrl   rN   r^   rj   rr   Ú_default_modifiers_reÚsearchÚspanÚcompilerk   )rT   rU   ÚexprÚrsrk   ÚstartÚendÚcast_res           rX   Ú_cleanup_index_exprz"PostgresqlImpl._cleanup_index_expr&  s”  € Ø�z‰z‹|×#Ñ# C¨Ó,×4Ñ4°S¸"Ó=ˆØ�;‰;Ð"à—<‘< 5§;¡;×#3Ñ#3×#9Ñ#9Ó#;Ð"<¸AÐ >ÀÓCˆDà�4‰<ä—6‘6˜/¨2¨tÓ4ˆDá�t˜A‘w #’~¨$¨r©(°cª/Ø˜˜"�:ˆDñ �t˜A‘w #’~¨$¨r©(°c«/ð
 ×,Ñ,ò 	ˆBØŸ	™	 $›Ð'ˆuÑ'Ø"ŸZ™Z¨›]‘
��sØ˜F˜U�| d¨3¨4 jÑ0�Ùð		ñ �t˜A‘w #’~¨$¨r©(°cª/Ø˜˜"�:ˆDñ �t˜A‘w #’~¨$¨r©(°c«/ô —*‘*˜\Ó*ˆØ�=‰=˜ÔØ—;‘;˜r 4Ó(ˆDä—6‘6˜/¨2¨tÓ4ˆDà�|‰|˜C Ó$ˆØˆrZ   c                ó<   — |j                   j                  d«      ryy)NÚpostgresql_nulls_not_distinct)Únulls_not_distinctrK   )Údialect_kwargsrM   )rT   Úitems     rX   Ú_dialect_optionszPostgresqlImpl._dialect_optionsH  s   € ð
 ×Ñ×"Ñ"Ð#BÔCØ*ØrZ   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)rT   Ú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                    rX   Úcompare_indexeszPostgresqlImpl.compare_indexesQ  s  € ð
 ˆØ×/Ñ/Ø˜Oó
ˆ
ñ Ø�J‰J�zÔ"Ø ×,Ñ,ˆØ!×-Ñ-ˆÜˆw‹<œ3˜w›<Ò'Ø�J‰JÐ+¬C°«L¨>¸¼cÀ'»l¸^ÐLÔMÙä#×-Ñ-¨cÓ2Ð2ØˆÜ(¬¨W°gÓ)>ÀÓBò 	P‰OˆC‘�#�sØ×-Ñ-¨cÓ2ˆIØ×-Ñ-¨n¸iÓHˆFà×-Ñ-¨cÓ2ˆIØ×-Ñ-¨n¸iÓHˆFà˜ÒØØ—‘Ó"×+Ñ+¨FÔ3Ø�yÑ  C¨9Ñ$4à—‘Ø" 3 % q¨¨ð 64ð 4ôô —	‘	Ø" 3 % q¨¨°ZØ&×+Ñ+Ð.ð /fðfõð —
‘
˜\¨#¨¨a°	¨}¸DÀÀÐNÕOð5	Pð8 ×)Ñ)¨.Ó9ˆ	Ø×)Ñ)¨/Ó:ˆ	Ø˜	Ò!Ø�J‰J˜ ) ¨D°°Ð<Ô=áÜ#×-Ñ-¨cÓ2Ð2Ùä#×(Ñ(¨Ó.Ð.ä#×)Ñ)Ó+Ð+rZ   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Ñ   )	rT   Úmetadata_constraintÚreflected_constraintÚmetadata_tupÚreflected_tupÚmeta_sigÚconn_sigÚmetadata_doÚconn_dos	            rX   Úcompare_unique_constraintz(PostgresqlImpl.compare_unique_constraint�  sÙ   € ð
 ×;Ñ;Øó
ˆð ×=Ñ=Ø ó
ˆð  ×'Ñ'ˆØ ×(Ñ(ˆØ�xÒÜ#×-Ñ-Ø˜h˜Z t¨H¨:Ð6óð ð ×+Ñ+¨L×,>Ñ,>Ó?ˆØ×'Ñ'¨×(;Ñ(;Ó<ˆØ˜'Ò!Ü#×-Ñ-Ø˜g˜Y d¨;¨-Ð8óð ô  ×%Ñ%Ó'Ð'rZ   c                óŒ   — |j                  di «      j                  «       }|j                  d«      s|j                  dd «       |S )NÚdialect_optionsrJ   )rM   Úcopyr‰   )rT   Úreflected_objectÚkindÚoptionss       rX   Ú adjust_reflected_dialect_optionsz/PostgresqlImpl.adjust_reflected_dialect_options©  sA   € ð #×&Ñ&Ð'8¸"Ó=×BÑBÓDˆØ�{‰{Ð/Ô0Ø�K‰KÐ,¨dÔ3ØˆrZ   c                óz   — t        |t        «      r|S |j                  | j                  dddœ¬«      j                  S )NTF)Úliteral_bindsÚinclude_table)ÚdialectÚcompile_kwargs)ro   rp   r´   rû   Ústring)rT   Úelements     rX   rË   zPostgresqlImpl._compile_element²  s=   € Ü�gœsÔ#ØˆNØ�‰Ø—L‘LØ-1ÀEÑJð ó 
÷ ‰&ð	rZ   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)ro   r   Ú
self_grouprŒ   Úrender_ddl_sql_expr)rT   rµ   r   r  rV   r�   s        €rX   r  z"PostgresqlImpl.render_ddl_sql_exprº  sD   ø€ ñ  œJ t¬\Ô:Ø—?‘?Ó$ˆDä‰wÑ*Øð
Ø$5Àñ
ØLNñ
ð 	
rZ   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)rq   Ú
__module__Ú
startswithÚhasattrÚ__visit_name__Úgetattr)rT   r   Úautogen_contextÚmodÚmeths        rX   Úrender_typezPostgresqlImpl.render_typeÑ  sa   € ô �5‹k×$Ñ$ˆØ�~‰~Ð>Ô?Øä�4Ð*¨U×-AÑ-AÑAÔBÜ˜4Ð!2°U×5IÑ5IÑ!IÓJˆDÙ˜˜Ó/Ð/àrZ   c           	     óN   — t        t        t        j                  ||dd«      «      S )NÚ	text_typez(.+?\(.*text_type=)©r   rp   r+   Ú_render_type_w_subtype©rT   r   r
  s      rX   Ú_render_HSTORE_typez"PostgresqlImpl._render_HSTORE_typeÞ  s,   € ô ÜÜ×)Ñ)Ø�¨Ð5Kóó
ð 	
rZ   c           	     óN   — t        t        t        j                  ||dd«      «      S )NÚ	item_typez(.+?\()r  r  s      rX   Ú_render_ARRAY_typez!PostgresqlImpl._render_ARRAY_typeè  s+   € ô ÜÜ×)Ñ)Ø�¨°Zóó
ð 	
rZ   c           	     óN   — t        t        t        j                  ||dd«      «      S ©NÚastext_typez(.+?\(.*astext_type=)r  r  s      rX   Ú_render_JSON_typez PostgresqlImpl._render_JSON_typeò  ó,   € ô ÜÜ×)Ñ)Ø�¨Ð7Oóó
ð 	
rZ   c           	     óN   — t        t        t        j                  ||dd«      «      S r  r  r  s      rX   Ú_render_JSONB_typez!PostgresqlImpl._render_JSONB_typeü  r  rZ   )rU   r3   rV   r   ÚreturnÚNone)r�   rp   rŽ   rp   r~   úOptional[bool]rm   ú3Optional[Union[_ServerDefaultType, Literal[False]]]r^   úOptional[str]r   úOptional[TypeEngine]r€   r"  r�   r   r‚   r#  rƒ   r!  r„   r   r…   r   rV   r   r  r  )rU   r3   rµ   rp   r  rp   )r¿   zUnion[Index, UniqueConstraint]r  zTuple[Any, ...])rÒ   r3   rÓ   r3   r  r'   )rè   r4   ré   r4   r  r'   )rô   rA   rõ   rp   r  zDict[str, Any])rþ   zUnion[ClauseElement, str]r  rp   )FF)
rµ   r:   r   Úboolr  r$  rV   r   r  rp   )r   r?   r
  rB   r  zUnion[str, Literal[False]])r   r7   r
  rB   r  rp   )r   r5   r
  rB   r  rp   )r   r8   r
  rB   r  rp   )r   r9   r
  rB   r  rp   )Ú__name__r  Ú__qualname__Ú__dialect__Útransactional_ddlr(   Útype_synonymsrY   rc   r}   r   rœ   r¨   rj   r´   r±   rº   rÀ   râ   rð   r÷   rË   r  r  r  r  r  r  Ú__classcell__©r�   s   @rX   rF   rF   R   sž  ø„ Ø€KØÐØ×-Ñ-Ø	Ð$Ð%ð1ñ €Mó
-ò1ò1
ðp $(ð Ø"Ø&*Ø $Ø(,Ø.2ð Ø,0Ø15ñ%7
àð7
ð ð7
ð
 !ð7
ð
ð7
ð ð7
ð $ð7
ð ð7
ð &ð7
ð ,ð7
ð"
ð7
ð" *ð#7
ð$ !/ð%7
ð& ð'7
ð( 
õ)7
òr%3òNJð> 	ˆ�
‰
Ð'Ó(Øˆ�
‰
Ð-Ó.Øˆ�
‰
�9ÓØˆ�
‰
Ð(Ó)Øˆ�
‰
Ð)Ó*ðÐó ðDØ2ðà	óð:,àð:,ð ð:,ð 
ó	:,ðx(à-ð(ð /ð(ð 
ó	(ð8Ø 4ðØ<?ðà	óóð #(Øð	
àð
ð  ð
ð ð	
ð
 ð
ð 
õ
ð.ØðØ2@ðà	#óð
Øð
Ø.<ð
à	ó
ð
Øð
Ø-;ð
à	ó
ð
Øð
Ø,:ð
à	ó
ð
Øð
Ø-;ð
à	÷
rZ   rF   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__rQ   Úto_instancer   rˆ   )rT   r^   rŽ   r   rV   rˆ   r�   s         €rX   r.  zPostgresqlColumnType.__init__  sB   ø€ ð —‘�w Ó%ˆÜ‰Ñ˜˜{Ñ1¨bÒ1Ü×)Ñ)¨%Ó0ˆŒ
Øˆ�
rZ   )r^   rp   rŽ   rp   r   r?   r  r  )r%  r  r&  r.  r*  r+  s   @rX   r‹   r‹     s-   ø„ ðØðØ&)ðØ2<ðà	÷ñ rZ   r‹   rG   c                óx   — t        || j                  | j                  «      ›dt        || j                  d «      ›�S )Nz RENAME TO )r   r�   r€   r#   Únew_table_name©rþ   ÚcompilerrV   s      rX   Úvisit_rename_tabler4    s6   € ô
 	�H˜g×0Ñ0°'·.±.ÕAÜ˜( G×$:Ñ$:¸DÔAðð rZ   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 %srf   )r   r�   r€   r   rŽ   r$   r   rˆ   r2  s      rX   Úvisit_column_typer6    sn   € ô
 	�H˜g×0Ñ0°'·.±.ÕAÜ�X˜w×2Ñ2Õ3Ø”K ¨'¯-©-Ó8Ó8Ø&-§m¢mˆ
�W—]‘]Ñ"Ð;ð	ð ð :<Ð;ð	ð rZ   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)r9  Úsql_compilerÚrender_literal_valuerQ   ÚStringÚformatr#   r�   r€   r"   rŽ   )rþ   r3  rV   Úddlr9  s        rX   Úvisit_column_commentr?  '  sŒ   € ð F€Cð
 �?‰?Ð&ð 	×Ñ×2Ñ2Ø�O‰OœXŸ_™_Ó.ô	
ð ð ð �:‰:Ü$Ø�g×(Ñ(¨'¯.©.ó
ô ' x°×1DÑ1DÓEØð ó ð rZ   c                ó4  — t        || j                  | j                  «      ›dt        || j                  «      ›d�}| j
                  €|dz  }|S | j                  €%|dz  }||j                  | j
                  «      z  }|S | j                  j                  | j
                  | j                  «      \  }}}| j
                  }t        |«      D ]J  }|dk(  r|d|j                  rdndz  z  }Œ|d|j                  t        d	i |t        ||«      i¤Ž«      z  z  }ŒL |S )
Nr¯   zDROP IDENTITYzADD ÚalwayszSET GENERATED %s ÚALWAYSz
BY DEFAULTzSET %s rK   )r   r�   r€   r   rŽ   r‘   rƒ   Úvisit_identity_columnÚimplÚ_compare_identity_defaultÚsortedrA  Úget_identity_optionsr   r	  )rþ   r3  rV   r   ÚdiffÚ_ÚidentityÚattrs           rX   rC  rC  =  s+  € ô
 	�H˜g×0Ñ0°'·.±.ÕAÜ�X˜w×2Ñ2Õ3ð€Dð ‡�Ðà�ÑˆØˆØ	×	(Ñ	(Ð	0à�‰ˆØ�×.Ñ.¨w¯©Ó?Ñ?ˆØˆð —\‘\×;Ñ;Ø�O‰O˜W×<Ñ<ó
‰
ˆˆa�ð —?‘?ˆÜ˜4“Lò 	ˆDØ�xÒØÐ+Ø (§¢‘H°\ññ ‘ð ˜	 H×$AÑ$AÜÑ? ¤g¨h¸Ó&=Ð>Ñ?ó%ñ ñ ‘ð	ð ˆrZ   Úcreate_exclude_constraintÚbatch_create_exclude_constraintÚexclude_constraintc                  óº   — e Zd ZdZdZ	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 d
d„Ze	 	 	 	 dd„«       Z	 d	 	 	 dd„Ze	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z	e	 	 	 	 	 	 	 	 	 	 dd„«       Z
y)ÚCreateExcludeConstraintOpz0Represent a create exclude constraint operation.ÚexcludeNc                óf   — || _         || _        || _        || _        || _        || _        || _        y r\   )Úconstraint_namer�   ÚelementsÚwherer€   Ú_orig_constraintrV   )rT   rS  r�   rT  rU  r€   rV  rV   s           rX   r.  z"CreateExcludeConstraintOp.__init__j  s7   € ð  /ˆÔØ$ˆŒØ ˆŒØˆŒ
ØˆŒØ 0ˆÔØˆ�rZ   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)rU  r€   rV  Ú
deferrableÚ	initiallyrˆ   )
r0   Ú_table_for_constraintr^   Ú_render_exprsr   rU  r€   rX  rY  rˆ   )Úclsrb   Úconstraint_tablerµ   r^   Úops         rX   Úfrom_constraintz)CreateExcludeConstraintOp.from_constraint  s™   € ô '×<Ñ<¸ZÓHÐÙØ�O‰OØ×!Ñ!à1;×1IÑ1I÷ð Ù-˜t T¨2��r’
ôô Ð3°Z×5EÑ5EÓ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^   rU  )rV  r-   ÚSchemaObjectsrN   r�   r€   r   rT  rS  rU  rV   r[  rP   r   r   Úappend_constraint)rT   Úmigration_contextÚ
schema_objÚtÚexclrµ   r^   Úopers           rX   Úto_constraintz'CreateExcludeConstraintOp.to_constraint’  sÄ   € ð × Ñ Ð,Ø×(Ñ(Ð(Ü×,Ñ,Ð->Ó?ˆ
Ø×Ñ˜TŸ_™_°T·[±[ÐÓAˆÜ Ø�]‰]Ø×%Ñ%Ø—*‘*ñ
ð �g‰gñ	
ˆð ×Ñò		4ñ 
ØØØà�O‰OœF 4¬Ó2Õ3ð	4ð 	
×Ñ˜DÔ!ØˆrZ   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\  Ú
operationsrS  r�   rT  rV   r^  s          rX   rL  z3CreateExcludeConstraintOp.create_exclude_constraint¨  s)   € ñV � *¨hÑ=¸"Ñ=ˆØ× Ñ  Ó$Ð$rZ   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€   )rD  r€   r�   rj  )r\  rk  rS  rT  rV   r^  s         rX   rM  z9CreateExcludeConstraintOp.batch_create_exclude_constraintÖ  sE   € ð& "—‘×-Ñ-ˆˆ8‰Ù� *§/¡/×"<Ñ"<¸hÑMÈ"ÑMˆØ× Ñ  Ó$Ð$rZ   )NNN)rS  zsqla_compat._ConstraintNamer�   zUnion[str, quoted_name]rT  zIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]rU  z)Optional[Union[ColumnElement[bool], str]]r€   r"  rV  zOptional[ExcludeConstraint]r  r  )rb   r   r  rP  r\   )rc  zOptional[MigrationContext]r  r   )rk  r/   rS  rp   r�   rp   rT  r   rV   r   r  úOptional[Table])
rk  r.   rS  rp   rT  r   rV   r   r  rm  )r%  r  r&  Ú__doc__Úconstraint_typer.  Úclassmethodr_  rh  rL  rM  rK   rZ   rX   rP  rP  `  s3  „ ñ ;à€Oð <@Ø $Ø8<ðà4ðð ,ðð
ð	ð 9ðð ðð 6ðð 
óð* ð
Ø*ð
à	"ò
ó ð
ð& ?CðØ!;ðà	óð, ð+%àð+%ð ð+%ð ð	+%ð
 ð+%ð ð+%ð 
ò+%ó ð+%ðZ ð%à#ð%ð ð%ð ð	%ð
 ð%ð 
ò%ó ñ%rZ   rP  c                ó:   — t        |j                  «       | d¬«      S )NT)Úalter)Ú_exclude_constraintrh  )r
  r^  s     rX   Ú_add_exclude_constraintrt  î  s   € ô ˜r×/Ñ/Ó1°?È$ÔOÐOrZ   c                óV   — t        j                  d| |«      }|dur|S t        | |d«      S )NrQ  F)r+   Ú_user_defined_renderrs  )rb   r
  Únamespace_metadataÚrendereds       rX   Ú!_render_inline_exclude_constraintry  õ  s9   € ô ×*Ñ*Ø�:˜ó€Hð �uÑØˆä˜z¨?¸EÓBÐBrZ   c                óB   — | j                   }|�|j                  d«       y)Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)ÚimportsÚadd)r
  r{  s     rX   Ú_postgresql_autogenerate_prefixr}    s#   € Ø×%Ñ%€GØÐØ�‰Ð@ÔAØrZ   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„}|r¢t        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 )NrX  rY  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ú=)r[  Ú_render_potential_columnrU  rÅ   r+   Ú_render_potential_exprrÏ   )	Úsqltextr^   ÚopstringÚargsÚkÚvr
  rb   Úoptss	         €€€rX   Údo_expr_where_optsz/_exclude_constraint.<locals>.do_expr_where_opts!  s¶   ø€ ð ,6×+CÑ+C÷

ð 

ñ (�˜™xô )ØØ#õò òð

ˆò 

ð ×ÑÐ'Ø�K‰KØÜ×/Ñ/Ø×$Ñ$ oóñôð 	�‰°$×7©$¨!¨Q¢¡1Ò%Ó7Ô8Øˆùô'

ùó$ 8s   ’BÂB$
z-%(prefix)screate_exclude_constraint(%(args)s)r€  )Úprefixr†  z%%(prefix)sExcludeConstraint(%(args)s))Ú
_has_batchrX  rÅ   rp   rY  rˆ   rN   r€   r+   Ú_identr^   Ú_render_gen_nameÚreprrÏ   Ú_alembic_autogenerate_prefixÚjoinr}  )rb   r
  rr  Ú	has_batchrŠ  r†  r‰  s   ``    @rX   rs  rs    s®  ú€ ð
 FH€Dà×*Ñ*€Ià×ÒØ�‰�\¤3 z×'<Ñ'<Ó#=Ð>Ô?Ø×ÒØ�‰�[¤# j×&:Ñ&:Ó";Ð<Ô=Ø×ÒØ�‰�Wœc *×"2Ñ"2Ó3Ð4Ô5Ù™ :×#3Ñ#3×#:Ò#:Ø�‰�XœvŸ}™}¨Z×-=Ñ-=×-DÑ-DÓEÐFÔGÙ�Z—_’_Ø�‰Ø”V×,Ñ,¨_¸j¿o¹oÓNÐOô	
öñ, ä”×(Ñ(¨¸*¿/¹/ÓJÓKð
ˆñ Ø”Tœ&Ÿ-™-¨
×(8Ñ(8×(=Ñ(=Ó>Ó?Ð@Ñ@ˆDØ�‰Ñ&Ó(Ô)Ø>Ü×9Ñ9¸/ÓJØ—I‘I˜d“OñB
ñ 
ð 	
ñ
 "Ó#ˆØ6Ü5°oÓFØ—I‘I˜d“Oñ:
ñ 
ð 	
rZ   c           	     óæ   — t        | t        «      r6| j                  rd}nd}|t        j                  |«      | j
                  dœz  S t        j                  | |t        | t        t        f«      ¬«      S )Nz"%(prefix)sliteral_column(%(name)r)z%(prefix)scolumn(%(name)r))r‹  r^   )Úwrap_in_element)	ro   r   Ú
is_literalr+   Ú_sqlalchemy_autogenerate_prefixr^   rƒ  r   r   )Úvaluer
  Útemplates      rX   r‚  r‚  J  sr   € ô �%œÔ&Ø×Òà;‰Hà3ˆHàÜ×<Ñ<¸_ÓMØ—J‘Jñ
ñ 
ð 	
ô
 ×,Ñ,ØØÜ& u¬z¼?Ð.KÓLô
ð 	
rZ   )rþ   r&   r3  r6   r  rp   )rþ   r‹   r3  r6   r  rp   )rþ   r!   r3  r6   r  rp   )rþ   r%   r3  r6   )r
  rB   r^  rP  r  rp   )rb   r   r
  rB   rw  r=   r  rp   )r
  rB   r  rp   )rb   r   r
  rB   rr  r$  r  rp   )r—  zGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]r
  rB   r  rp   )pÚ
__future__r   Úloggingrj   Útypingr   r   r   r   r   r	   r
   r   r   Ú
sqlalchemyr   r   r   r   r   r   r   r   rQ   Ú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&   rD  r'   r(   rf   r*   Úautogenerater+   rk  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‹   r4  r6  r?  rC  Úregister_operationÚAddConstraintOpÚregister_add_constraintrP  Ú	renderersÚdispatch_forrt  Ú_constraint_renderersry  r}  rs  r‚  rK   rZ   rX   ú<module>r¶     s  ðõ #ã Û 	Ý Ý Ý Ý Ý Ý Ý Ý  Ý å Ý Ý Ý %Ý Ý Ý Ý (Ý 1Ý <Ý 2Ý )Ý 0Ý .Ý 4Ý %å Ý Ý Ý Ý $Ý #Ý Ý 'Ý Ý "Ý Ý Ý !Ý Ý "Ý -Ý (Ý Ý 'ñ Ýå Ý+Ý:ÝAÝ<Ý8Ý9Ý5Ý5Ý3Ý.Ý+Ý2å(Ý*Ý1Ý-Ý4à€g×Ñ˜Ó!€ôr
�[ô r
ôj˜;ô ñ 
ˆ+�|Ó$ðØðØ$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óð<
Ø!ð<
à#ð<
ð ð<
ð 	ó	<
ð~
ðð
ð $ð	
ð
 	ô
rZ   