Ë
    §û’gát  ã                  ó„  — d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" ddl#m$Z$ ddl#m%Z% ddl#m&Z& ddl#m'Z' ddl#m(Z( dd l#m)Z) dd!l#m*Z* dd"l#m+Z+ dd#l#m,Z, dd$l-m.Z. dd%l-m/Z/ d&d'l0m1Z1 d&d(l2m3Z3 d&d)l4m5Z5 d&d*l4m6Z6 d&d+l7m8Z8 d&d,l7m9Z9 d&d-l1m:Z: d&d.l;m<Z< erld d/lm=Z= d d0lm>Z> d d1lm?Z? d d2l@mAZA d d3lBmCZC d d4lDmEZE d d5lFmGZG d d6lFmHZH d d7lmIZI d d8lmJZJ d d9lmKZK d d:lLmMZM d d;lLmNZN d d<lOmPZP dd=l#mQZQ d&d>lRmSZS d&d?lTmUZU d&d@lVmWZW  ej°                  eY«      ZZ G dA„ dBe/«      Z[ G dC„ dDe&«      Z\ e<e,dE«      	 	 	 	 	 	 dTdF„«       Z] e<e\dE«      	 	 	 	 	 	 dUdG„«       Z^ e<e'dE«      	 	 	 	 	 	 dVdH„«       Z_ e<e+dE«      	 	 	 	 dWdI„«       Z` e9jÂ                  dJ«       e8jÂ                  dJdK«      e5jÄ                  jÇ                  dL«       G dM„ dNe5jÄ                  «      «       «       «       Zde3jÊ                  jÍ                  ed«      	 	 	 	 	 	 dXdO„«       Zge3jÐ                  jÍ                  e«      	 	 	 	 	 	 	 	 dYdP„«       ZidZdQ„Zj	 	 	 	 	 	 	 	 d[dR„Zk	 	 	 	 	 	 d\dS„Zly)]é    )ÚannotationsN)ÚAny)Úcast)ÚDict)ÚList)ÚOptional)ÚSequence)ÚTuple)ÚTYPE_CHECKING)ÚUnion)ÚColumn)ÚFloat)Úliteral_column)ÚNumeric)Útext)Útypes)ÚBIGINT)ÚExcludeConstraint)ÚINTEGER)ÚCreateIndex)ÚColumnClause)Ú
TextClause)ÚFunctionElement)ÚNULLTYPEé   )Úalter_column)Úalter_table)ÚAlterColumn)ÚColumnComment)Úformat_column_name)Úformat_table_name)Úformat_type)ÚIdentityColumnDefault)ÚRenameTable)ÚComparisonResult)ÚDefaultImplé   )Úutil)Úrender)Úops)Ú	schemaobj)ÚBatchOperations)Ú
Operations)Úsqla_compat)Úcompiles)ÚLiteral)ÚIndex)ÚUniqueConstraint)ÚARRAY)ÚPGDDLCompiler)ÚHSTORE)ÚJSON)ÚJSONB)ÚClauseElement)ÚColumnElement)Úquoted_name)ÚMetaData)ÚTable)Ú
TypeEngine)Ú_ServerDefault)ÚAutogenContext)Ú_f_name)ÚMigrationContextc                  óJ  ‡ — e Zd ZdZdZej                  ddhfz   Zdd„Zd„ Zd„ Z		 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Z
d	„ Zd
„ Z ej                  d«       ej                  d«       ej                  d«       ej                  d«       ej                  d«      fZdd„Z	 	 	 	 d d„Z	 	 	 	 	 	 d!d„Z	 	 	 	 	 	 d"d„Z	 	 	 	 	 	 d#d„Zd$d„Z	 	 d%	 	 	 	 	 	 	 	 	 d&ˆ fd„Z	 	 	 	 	 	 d'd„Z	 	 	 	 	 	 d(d„Z	 	 	 	 	 	 d)d„Z	 	 	 	 	 	 d*d„Z	 	 	 	 	 	 d+d„Zˆ xZS ),ÚPostgresqlImplÚ
postgresqlTÚFLOATzDOUBLE PRECISIONc                ó   — |j                   j                  dd «      xs d}|D ]N  }||j                  j                  vsŒ|j                  j	                  t        |t        j                  «      «       ŒP | j                  t        |fi |¤Ž«       y )NÚpostgresql_include© )
ÚkwargsÚgetÚtableÚcÚappend_columnr   ÚsqltypesÚNullTypeÚ_execr   )ÚselfÚindexÚkwrG   Úcols        úU/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/alembic/ddl/postgresql.pyÚcreate_indexzPostgresqlImpl.create_indexV   sz   € ð #Ÿ\™\×-Ñ-Ð.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)rQ   Ú
batch_implrK   Ú
constraints       rU   Úprep_table_for_batchz#PostgresqlImpl.prep_table_for_batchb   sA   € Ø×+Ñ+ò 	1ˆJà—‘Ñ+Ø—O‘O z×'CÑ'CÒCà×$Ñ$ ZÕ0ñ	1rW   c                óæ  — |j                   r||j                  j                  u ry|}||k(  }|ryd |||j                  fv r| S |j                  j                  }t        |t        «      rHt        |j                  t        t        f«      st        j                  dd|«      }d|› d�}t        |«      }| j                  }|€J ‚|j                  t        j                   t        |«      |k(  «      «       S )NFz^'|'$Ú ú')Úprimary_keyrK   Ú_autoincrement_columnÚserver_defaultÚargÚ
isinstanceÚstrÚtyper   r   ÚreÚsubr   Ú
connectionÚscalarr.   Ú_select)	rQ   Úinspector_columnÚmetadata_columnÚrendered_metadata_defaultÚrendered_inspector_defaultÚconn_col_defaultÚdefaults_equalÚmetadata_defaultÚconns	            rU   Úcompare_server_defaultz%PostgresqlImpl.compare_server_defaultj   s  € ð ×'Ò'Ø ?×#8Ñ#8×#NÑ#NÑNàà5Ðà)Ð-FÑFˆÙØàØØ%Ø×*Ñ*ð
ñ 
ð
 &Ð%Ð%à*×9Ñ9×=Ñ=ÐäÐ&¬Ô,ÜÐ.×3Ñ3´g¼uÐ5EÔFÜ#%§6¡6¨(°BÐ8HÓ#IÐ Ø%&Ð'7Ð&8¸Ð#:Ð ä-Ð.>Ó?Ðð �‰ˆØÐÐÐØ—;‘;Ü×ÑÜÐ/Ó0Ð4DÑDóó
ð 
ð 	
rW   c                óÚ   •— |j                  dd «      }|�|€t        j                  d«      ‚|�"| j                  t	        ||||||	|
|¬«      «       t        ‰| �  ||f||||||	|
||dœ	|¤Ž y )NÚpostgresql_usingz6postgresql_using must be used with the type_ parameter)ÚschemaÚusingÚexisting_typeÚexisting_server_defaultÚexisting_nullable)	Únullablerf   r[   r{   Úautoincrementr}   r~   r   Úexisting_autoincrement)Úpopr(   ÚCommandErrorrP   ÚPostgresqlColumnTypeÚsuperr   )rQ   Ú
table_nameÚcolumn_namer€   rf   r[   Útype_r{   r�   r}   r~   r   r‚   rS   r|   Ú	__class__s                  €rU   r   zPostgresqlImpl.alter_column—   s«   ø€ ð  —‘Ð)¨4Ó0ˆàÐ  Ü×#Ñ#ØHóð ð ÐØ�J‰JÜ$ØØØØ!ØØ"/Ø,CØ&7ô	ôô 	‰ÑØØð	
ð Ø)ØØØ'Ø'Ø$;Ø/Ø#9ñ	
ð ó	
rW   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Údefaultrj   znextval\('(.+?)'::regclass\)a9  select c.relname, a.attname from pg_class as c join pg_depend d on d.objid=c.oid and d.classid='pg_class'::regclass and d.refclassid='pg_class'::regclass join pg_class t on t.oid=d.refobjid join pg_attribute a on a.attrelid=t.oid and a.attnum=d.refobjsubid where c.relkind='S' and c.oid=cast(:seqname as regclass)r   )Úseqnamer[   z^Detected sequence named '%s' as owned by integer column '%s(%s)', assuming SERIAL and omitting)rJ   rh   r   r   rk   Úmatchr.   Ú_exec_on_inspectorr   ÚgroupÚfirstÚlogÚinfor[   )rQ   Ú	inspectorrK   Úcolumn_infoÚ	seq_matchr“   r�   Úcolnames           rU   Úautogen_column_reflectz%PostgresqlImpl.autogen_column_reflectË   sÚ   € Ø�?‰?˜9Ô%¬*Ø˜Ñ¤'¬6Ð!2ô+
ô Ÿ™Ø/°¸YÑ1GóˆIñ Ü"×5Ñ5ØÜð	;óð &ŸO™O¨AÓ.ô÷ ‘%“'ð ñ  Ø'+Ñ$�G˜WØ +¨fÑ"5Ò5ÜŸ™ð;ð $Ø!ŸJ™JØ#ôð (¨	Ñ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   € ð &ö
àØ�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ú"rb   rc   ú.z::z(::[\w ]+\w)r   ú(éÿÿÿÿú)r   z	cast\s*\(zas\s+[^)]+\)ú )ÚlowerÚreplacerK   r[   rk   rl   Ú_default_modifiers_reÚsearchÚspanÚcompilerŽ   )rQ   rR   ÚexprÚrsrŽ   ÚstartÚendÚcast_res           rU   Ú_cleanup_index_exprz"PostgresqlImpl._cleanup_index_expr  s”  € Ø�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 Ó$ˆØˆrW   c                ó<   — |j                   j                  d«      ryy)NÚpostgresql_nulls_not_distinct)Únulls_not_distinctrH   )Údialect_kwargsrJ   )rQ   Úitems     rU   Ú_dialect_optionszPostgresqlImpl._dialect_options:  s   € ð
 ×Ñ×"Ñ"Ð#BÔCØ*ØrW   c           
     ó  — g }| j                  ||«      }|r|j                  |«       |j                  }|j                  }t        |«      t        |«      k7  r)|j                  dt        |«      › dt        |«      › �«       |rt	        j
                  |«      S g }t        t        ||«      d«      D ]×  \  }\  }	}
| j                  |	«      }| j                  ||«      }| j                  |
«      }| j                  ||«      }||k(  rŒU|j                  «       j                  d«      rJd|v sd|v rB|j                  d|› d|›d�«       t        j                  d	|› d|›d
|j                  ›d�«       Œ¾|j                  d|› d|›d|›�«       ŒÙ | j                  |«      }| j                  |«      }||k7  r|j!                  d|› d|› �«       |rt	        j
                  |«      S |rt	        j"                  |«      S t	        j$                  «       S )Nzexpression number ú to r   Ú_opsr«   rª   zexpression #z' detected as including operator clause.zExpression #z
 in index a   detected to include an operator clause. Expression compare cannot proceed. Please move the operator clause to the ``postgresql_ops`` dict to enable proper compare of the index expressions: https://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#operator-classeszoptions )Ú_compare_index_uniqueÚappendÚexpressionsÚlenr%   Ú	DifferentÚ	enumerateÚzipÚ_compile_elementr·   ÚstripÚendswithr(   Úwarnr[   r½   ÚextendÚSkipÚEqual)rQ   Úmetadata_indexÚreflected_indexÚmsgÚ
unique_msgÚm_exprsÚr_exprsÚskipÚposÚm_eÚr_eÚ	m_compileÚm_textÚ	r_compileÚr_textÚ	m_optionsÚ	r_optionss                    rU   Úcompare_indexeszPostgresqlImpl.compare_indexesC  s  € ð
 ˆØ×/Ñ/Ø˜Oó
ˆ
ñ Ø�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Ùä#×(Ñ(¨Ó.Ð.ä#×)Ñ)Ó+Ð+rW   c                óŠ  — | j                  |«      }| j                  |«      }|j                  }|j                  }||k7  rt        j                  d|› d|› �«      S | j                  |j                  «      }| j                  |j                  «      }||k7  rt        j                  d|› d|› �«      S t        j                  «       S )Nzexpression r¿   )Ú_create_metadata_constraint_sigÚ _create_reflected_constraint_sigÚunnamedr%   rÅ   r½   ÚconstrÎ   )	rQ   Úmetadata_constraintÚreflected_constraintÚmetadata_tupÚreflected_tupÚmeta_sigÚconn_sigÚmetadata_doÚconn_dos	            rU   Úcompare_unique_constraintz(PostgresqlImpl.compare_unique_constraint  sÙ   € ð
 ×;Ñ;Øó
ˆð ×=Ñ=Ø ó
ˆð  ×'Ñ'ˆØ ×(Ñ(ˆØ�xÒÜ#×-Ñ-Ø˜h˜Z t¨H¨:Ð6óð ð ×+Ñ+¨L×,>Ñ,>Ó?ˆØ×'Ñ'¨×(;Ñ(;Ó<ˆØ˜'Ò!Ü#×-Ñ-Ø˜g˜Y d¨;¨-Ð8óð ô  ×%Ñ%Ó'Ð'rW   c                óŒ   — |j                  di «      j                  «       }|j                  d«      s|j                  dd «       |S )NÚdialect_optionsrG   )rJ   Úcopyrƒ   )rQ   Úreflected_optionsÚkindÚoptionss       rU   Ú adjust_reflected_dialect_optionsz/PostgresqlImpl.adjust_reflected_dialect_options›  sA   € ð $×'Ñ'Ð(9¸2Ó>×CÑCÓEˆØ�{‰{Ð/Ô0Ø�K‰KÐ,¨dÔ3ØˆrW   c                óz   — t        |t        «      r|S |j                  | j                  dddœ¬«      j                  S )NTF)Úliteral_bindsÚinclude_table)ÚdialectÚcompile_kwargs)rh   ri   r±   rø   Ústring)rQ   Úelements     rU   rÈ   zPostgresqlImpl._compile_element¤  s=   € Ü�gœsÔ#ØˆNØ�‰Ø—L‘LØ-1ÀEÑJð ó 
÷ ‰&ð	rW   c                ón   •— |r t        |t        «      s|j                  «       }t        ‰| �  |f||dœ|¤ŽS )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        )Úis_server_defaultÚis_index)rh   r   Ú
self_groupr†   Úrender_ddl_sql_expr)rQ   r²   rý   rþ   rS   rŠ   s        €rU   r   z"PostgresqlImpl.render_ddl_sql_expr¬  sD   ø€ ñ  œJ t¬\Ô:Ø—?‘?Ó$ˆDä‰wÑ*Øð
Ø$5Àñ
ØLNñ
ð 	
rW   c                óÈ   — t        |«      j                  }|j                  d«      syt        | d|j                  z  «      r"t        | d|j                  z  «      } |||«      S y)Nzsqlalchemy.dialects.postgresqlFz_render_%s_type)rj   Ú
__module__Ú
startswithÚhasattrÚ__visit_name__Úgetattr)rQ   r‰   Úautogen_contextÚmodÚmeths        rU   Úrender_typezPostgresqlImpl.render_typeÃ  sa   € ô �5‹k×$Ñ$ˆØ�~‰~Ð>Ô?Øä�4Ð*¨U×-AÑ-AÑAÔBÜ˜4Ð!2°U×5IÑ5IÑ!IÓJˆDÙ˜˜Ó/Ð/àrW   c           	     óN   — t        t        t        j                  ||dd«      «      S )NÚ	text_typez(.+?\(.*text_type=)©r   ri   r)   Ú_render_type_w_subtype©rQ   r‰   r  s      rU   Ú_render_HSTORE_typez"PostgresqlImpl._render_HSTORE_typeÐ  s,   € ô ÜÜ×)Ñ)Ø�¨Ð5Kóó
ð 	
rW   c           	     óN   — t        t        t        j                  ||dd«      «      S )NÚ	item_typez(.+?\()r  r  s      rU   Ú_render_ARRAY_typez!PostgresqlImpl._render_ARRAY_typeÚ  s+   € ô ÜÜ×)Ñ)Ø�¨°Zóó
ð 	
rW   c           	     óN   — t        t        t        j                  ||dd«      «      S ©NÚastext_typez(.+?\(.*astext_type=)r  r  s      rU   Ú_render_JSON_typez PostgresqlImpl._render_JSON_typeä  ó,   € ô ÜÜ×)Ñ)Ø�¨Ð7Oóó
ð 	
rW   c           	     óN   — t        t        t        j                  ||dd«      «      S r  r  r  s      rU   Ú_render_JSONB_typez!PostgresqlImpl._render_JSONB_typeî  r  rW   )rR   r1   rS   r   ÚreturnÚNone)
NFNNNNNNNN)r‡   ri   rˆ   ri   r€   úOptional[bool]rf   z%Union[_ServerDefault, Literal[False]]r[   úOptional[str]r‰   úOptional[TypeEngine]r{   r  r�   r  r}   r  r~   zOptional[_ServerDefault]r   r  r‚   r  rS   r   r  r  )rR   r1   r²   ri   r  ri   )r¼   zUnion[Index, UniqueConstraint]r  zTuple[Any, ...])rÏ   r1   rÐ   r1   r  r%   )rå   r2   ræ   r2   r  r%   )rñ   úDict[str, Any]rò   ri   r  r   )rû   zUnion[ClauseElement, str]r  ri   )FF)
r²   r8   rý   Úboolrþ   r!  rS   r   r  ri   )r‰   r=   r  r?   r  zUnion[str, Literal[False]])r‰   r5   r  r?   r  ri   )r‰   r3   r  r?   r  ri   )r‰   r6   r  r?   r  ri   )r‰   r7   r  r?   r  ri   )Ú__name__r  Ú__qualname__Ú__dialect__Útransactional_ddlr&   Útype_synonymsrV   r`   rx   r   r˜   r¤   rk   r±   r®   r·   r½   rß   rí   rô   rÈ   r   r
  r  r  r  r  Ú__classcell__©rŠ   s   @rU   rC   rC   O   sš  ø„ Ø€KØÐØ×-Ñ-Ø	Ð$Ð%ð1ñ €Mó
-ò1ò+
ðb $(Ø@EØ"Ø&*Ø $Ø(,Ø.2Ø<@Ø,0Ø15ð2
àð2
ð ð2
ð !ð	2
ð
 >ð2
ð ð2
ð $ð2
ð ð2
ð &ð2
ð ,ð2
ð ":ð2
ð *ð2
ð !/ð2
ð ð2
ð 
õ2
òh%3òNJð> 	ˆ�
‰
Ð'Ó(Øˆ�
‰
Ð-Ó.Øˆ�
‰
�9ÓØˆ�
‰
Ð(Ó)Øˆ�
‰
Ð)Ó*ðÐó ðDØ2ðà	óð:,àð:,ð ð:,ð 
ó	:,ðx(à-ð(ð /ð(ð 
ó	(ð8Ø!/ðØ7:ðà	óóð #(Øð	
àð
ð  ð
ð ð	
ð
 ð
ð 
õ
ð.ØðØ2@ðà	#óð
Øð
Ø.<ð
à	ó
ð
Øð
Ø-;ð
à	ó
ð
Øð
Ø,:ð
à	ó
ð
Øð
Ø-;ð
à	÷
rW   rC   c                  ó0   ‡ — e Zd Z	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )r…   c                óŽ   •— |j                  dd «      }t        ‰| �  ||fi |¤Ž t        j                  |«      | _        || _        y )Nr|   )rƒ   r†   Ú__init__rN   Úto_instancer‰   r|   )rQ   r[   rˆ   r‰   rS   r|   rŠ   s         €rU   r+  zPostgresqlColumnType.__init__ú  sB   ø€ ð —‘�w Ó%ˆÜ‰Ñ˜˜{Ñ1¨bÒ1Ü×)Ñ)¨%Ó0ˆŒ
Øˆ�
rW   )r[   ri   rˆ   ri   r‰   r=   r  r  )r"  r  r#  r+  r'  r(  s   @rU   r…   r…   ù  s-   ø„ ðØðØ&)ðØ2<ðà	÷ñ rW   r…   rD   c                óx   — t        || j                  | j                  «      ›dt        || j                  d «      ›�S )Nz RENAME TO )r   r‡   r{   r!   Únew_table_name©rû   ÚcompilerrS   s      rU   Úvisit_rename_tabler1    s6   € ô
 	�H˜g×0Ñ0°'·.±.ÕAÜ˜( G×$:Ñ$:¸DÔAðð rW   c           	     óê   — t        || j                  | j                  «      ›dt        || j                  «      ›ddt        || j                  «      z  ›d| j                  rd| j                  z  ›�S d›�S )Nr«   zTYPE %szUSING %srb   )r   r‡   r{   r   rˆ   r"   r‰   r|   r/  s      rU   Úvisit_column_typer3    sn   € ô
 	�H˜g×0Ñ0°'·.±.ÕAÜ�X˜w×2Ñ2Õ3Ø”K ¨'¯-©-Ó8Ó8Ø&-§m¢mˆ
�W—]‘]Ñ"Ð;ð	ð ð :<Ð;ð	ð rW   c                ó   — d}| j                   �8|j                  j                  | j                   t        j                  «       «      nd}|j                  t        || j                  | j                  «      t        || j                  «      |¬«      S )Nz9COMMENT ON COLUMN {table_name}.{column_name} IS {comment}ÚNULL)r‡   rˆ   Úcomment)r6  Úsql_compilerÚrender_literal_valuerN   ÚStringÚformatr!   r‡   r{   r    rˆ   )rû   r0  rS   Úddlr6  s        rU   Úvisit_column_commentr<    sŒ   € ð F€Cð
 �?‰?Ð&ð 	×Ñ×2Ñ2Ø�O‰OœXŸ_™_Ó.ô	
ð ð ð �:‰:Ü$Ø�g×(Ñ(¨'¯.©.ó
ô ' x°×1DÑ1DÓEØð ó ð rW   c                óH  — t        || j                  | j                  «      ›dt        || j                  «      ›d�}| j
                  €|dz  }|S | j                  €%|dz  }||j                  | j
                  «      z  }|S | j                  j                  | j
                  | j                  «      \  }}}| j
                  }t        |«      D ]T  }|dk(  r|d|j                  rdndz  z  }Œ|d|j                  t        j                  d	i |t        ||«      i¤Ž«      z  z  }ŒV |S )
Nr«   zDROP IDENTITYzADD ÚalwayszSET GENERATED %s ÚALWAYSz
BY DEFAULTzSET %s rH   )r   r‡   r{   r   rˆ   rŒ   r~   Úvisit_identity_columnÚimplÚ_compare_identity_defaultÚsortedr>  Úget_identity_optionsr.   ÚIdentityr  )rû   r0  rS   r   ÚdiffÚ_ÚidentityÚattrs           rU   r@  r@  /  s1  € ô
 	�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Ü×(Ñ(ÑK¨D´'¸(ÀDÓ2IÐ+JÑKó%ñ ñ ‘ð	ð ˆrW   Úcreate_exclude_constraintÚbatch_create_exclude_constraintÚexclude_constraintc                  óº   — e Zd ZdZdZ	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 d
d„Ze	 	 	 	 dd„«       Z	 d	 	 	 dd„Ze	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z	e	 	 	 	 	 	 	 	 	 	 dd„«       Z
y)ÚCreateExcludeConstraintOpz0Represent a create exclude constraint operation.ÚexcludeNc                óf   — || _         || _        || _        || _        || _        || _        || _        y rY   )Úconstraint_namer‡   ÚelementsÚwherer{   Ú_orig_constraintrS   )rQ   rQ  r‡   rR  rS  r{   rT  rS   s           rU   r+  z"CreateExcludeConstraintOp.__init__\  s7   € ð  /ˆÔØ$ˆŒØ ˆŒØˆŒ
ØˆŒØ 0ˆÔØˆ�rW   c                ó@  — t        j                  |«      } | |j                  |j                  |j                  D ���cg c]
  \  }}}||f‘Œ c}}}t	        d|j
                  «      |j                  ||j                  |j                  |j                  ¬«	      S c c}}}w )NzColumnElement[bool] | None)rS  r{   rT  Ú
deferrableÚ	initiallyr|   )
r.   Ú_table_for_constraintr[   Ú_render_exprsr   rS  r{   rV  rW  r|   )Úclsr_   Úconstraint_tabler²   r[   Úops         rU   Úfrom_constraintz)CreateExcludeConstraintOp.from_constraintq  s™   € ô '×<Ñ<¸ZÓHÐÙØ�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[   rS  )rT  r+   ÚSchemaObjectsrK   r‡   r{   r   rR  rQ  rS  rS   rY  rM   r   r   Úappend_constraint)rQ   Úmigration_contextÚ
schema_objÚtÚexclr²   r[   Úopers           rU   Úto_constraintz'CreateExcludeConstraintOp.to_constraint„  sÄ   € ð × Ñ Ð,Ø×(Ñ(Ð(Ü×,Ñ,Ð->Ó?ˆ
Ø×Ñ˜TŸ_™_°T·[±[ÐÓAˆÜ Ø�]‰]Ø×%Ñ%Ø—*‘*ñ
ð �g‰gñ	
ˆð ×Ñò		4ñ 
ØØØà�O‰OœF 4¬Ó2Õ3ð	4ð 	
×Ñ˜DÔ!ØˆrW   c                ó:   —  | |||fi |¤Ž}|j                  |«      S )aØ  Issue an alter to create an EXCLUDE constraint using the
        current migration context.

        .. note::  This method is Postgresql specific, and additionally
           requires at least SQLAlchemy 1.0.

        e.g.::

            from alembic import op

            op.create_exclude_constraint(
                "user_excl",
                "user",
                ("period", "&&"),
                ("group", "="),
                where=("group != 'some group'"),
            )

        Note that the expressions work the same way as that of
        the ``ExcludeConstraint`` object itself; if plain strings are
        passed, quoting rules must be applied manually.

        :param name: Name of the constraint.
        :param table_name: String name of the source table.
        :param elements: exclude conditions.
        :param where: SQL expression or SQL string with optional WHERE
         clause.
        :param deferrable: optional bool. If set, emit DEFERRABLE or
         NOT DEFERRABLE when issuing DDL for this constraint.
        :param initially: optional string. If set, emit INITIALLY <value>
         when issuing DDL for this constraint.
        :param schema: Optional schema name to operate within.

        )Úinvoke)rZ  Ú
operationsrQ  r‡   rR  rS   r\  s          rU   rJ  z3CreateExcludeConstraintOp.create_exclude_constraintš  s)   € ñV � *¨hÑ=¸"Ñ=ˆØ× Ñ  Ó$Ð$rW   c                ó”   — |j                   j                  |d<    | ||j                   j                  |fi |¤Ž}|j                  |«      S )a3  Issue a "create exclude constraint" instruction using the
        current batch migration context.

        .. note::  This method is Postgresql specific, and additionally
           requires at least SQLAlchemy 1.0.

        .. seealso::

            :meth:`.Operations.create_exclude_constraint`

        r{   )rA  r{   r‡   rh  )rZ  ri  rQ  rR  rS   r\  s         rU   rK  z9CreateExcludeConstraintOp.batch_create_exclude_constraintÈ  sE   € ð& "—‘×-Ñ-ˆˆ8‰Ù� *§/¡/×"<Ñ"<¸hÑMÈ"ÑMˆØ× Ñ  Ó$Ð$rW   )NNN)rQ  zsqla_compat._ConstraintNamer‡   zUnion[str, quoted_name]rR  zIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]rS  z)Optional[Union[ColumnElement[bool], str]]r{   r  rT  zOptional[ExcludeConstraint]r  r  )r_   r   r  rN  rY   )ra  zOptional[MigrationContext]r  r   )ri  r-   rQ  ri   r‡   ri   rR  r   rS   r   r  úOptional[Table])
ri  r,   rQ  ri   rR  r   rS   r   r  rk  )r"  r  r#  Ú__doc__Úconstraint_typer+  Úclassmethodr]  rf  rJ  rK  rH   rW   rU   rN  rN  R  s3  „ ñ ;à€Oð <@Ø $Ø8<ðà4ðð ,ðð
ð	ð 9ðð ðð 6ðð 
óð* ð
Ø*ð
à	"ò
ó ð
ð& ?CðØ!;ðà	óð, ð+%àð+%ð ð+%ð ð	+%ð
 ð+%ð ð+%ð 
ò+%ó ð+%ðZ ð%à#ð%ð ð%ð ð	%ð
 ð%ð 
ò%ó ñ%rW   rN  c                ó:   — t        |j                  «       | d¬«      S )NT)Úalter)Ú_exclude_constraintrf  )r  r\  s     rU   Ú_add_exclude_constraintrr  à  s   € ô ˜r×/Ñ/Ó1°?È$ÔOÐOrW   c                óV   — t        j                  d| |«      }|dur|S t        | |d«      S )NrO  F)r)   Ú_user_defined_renderrq  )r_   r  Únamespace_metadataÚrendereds       rU   Ú!_render_inline_exclude_constraintrw  ç  s9   € ô ×*Ñ*Ø�:˜ó€Hð �uÑØˆä˜z¨?¸EÓBÐBrW   c                óB   — | j                   }|�|j                  d«       y)Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)ÚimportsÚadd)r  ry  s     rU   Ú_postgresql_autogenerate_prefixr{  ö  s#   € Ø×%Ñ%€GØÐØ�‰Ð@ÔAØrW   c                ó  ‡ ‡‡— g Š‰j                   }‰ j                  r&‰j                  dt        ‰ j                  «      f«       ‰ j                  r&‰j                  dt        ‰ j                  «      f«       ‰ j
                  r&‰j                  dt        ‰ j
                  «      f«       |sR|rP‰ j                  j                  r:‰j                  dt        j                  ‰ j                  j                  «      f«       |s=‰ j                  r1‰j                  dt        j                  ‰‰ j                  «      f«       ˆˆ ˆfd„}|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 )NrV  rW  r|   r{   r[   c            
     óT  •— ‰j                   D � ��cg c]  \  } }}dt        | ‰«      ›d|›d�‘Œ }}} }‰j                  �2|j                  dt	        j
                  ‰j                  ‰«      z  «       |j                  ‰D ��cg c]  \  }}|›d|›�‘Œ c}}«       |S c c}}} w c c}}w )Nr¨   ú, rª   zwhere=%sú=)rY  Ú_render_potential_columnrS  rÂ   r)   Ú_render_potential_exprrÌ   )	Úsqltextr[   ÚopstringÚargsÚkÚvr  r_   Úoptss	         €€€rU   Údo_expr_where_optsz/_exclude_constraint.<locals>.do_expr_where_opts  s¶   ø€ ð ,6×+CÑ+C÷

ð 

ñ (�˜™xô )ØØ#õò òð

ˆò 

ð ×ÑÐ'Ø�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_batchrV  rÂ   ri   rW  r|   rK   r{   r)   Ú_identr[   Ú_render_gen_nameÚreprrÌ   Ú_alembic_autogenerate_prefixÚjoinr{  )r_   r  rp  Ú	has_batchrˆ  r„  r‡  s   ``    @rU   rq  rq  ý  s®  ú€ ð
 FH€Dà×*Ñ*€Ià×ÒØ�‰�\¤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ñ:
ñ 
ð 	
rW   c           	     óæ   — t        | t        «      r6| j                  rd}nd}|t        j                  |«      | j
                  dœz  S t        j                  | |t        | t        t        f«      ¬«      S )Nz"%(prefix)sliteral_column(%(name)r)z%(prefix)scolumn(%(name)r))r‰  r[   )Úwrap_in_text)	rh   r   Ú
is_literalr)   Ú_sqlalchemy_autogenerate_prefixr[   r�  r   r   )Úvaluer  Útemplates      rU   r€  r€  <  sr   € ô �%œÔ&Ø×Òà;‰Hà3ˆHàÜ×<Ñ<¸_ÓMØ—J‘Jñ
ñ 
ð 	
ô
 ×,Ñ,ØØÜ# E¬J¼Ð+HÓIô
ð 	
rW   )rû   r$   r0  r4   r  ri   )rû   r…   r0  r4   r  ri   )rû   r   r0  r4   r  ri   )rû   r#   r0  r4   )r  r?   r\  rN  r  ri   )r_   r   r  r?   ru  r;   r  ri   )r  r?   r  ri   )r_   r   r  r?   rp  r!  r  ri   )r•  zGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]r  r?   r  ri   )mÚ
__future__r   Úloggingrk   Útypingr   r   r   r   r   r	   r
   r   r   Ú
sqlalchemyr   r   r   r   r   r   rN   Úsqlalchemy.dialects.postgresqlr   r   r   Úsqlalchemy.schemar   Úsqlalchemy.sql.elementsr   r   Úsqlalchemy.sql.functionsr   Úsqlalchemy.typesr   Úbaser   r   r   r   r    r!   r"   r#   r$   rA  r%   r&   rb   r(   Úautogenerater)   ri  r*   r+   Úoperations.baser,   r-   r.   Úutil.sqla_compatr/   r0   r1   r2   Ú$sqlalchemy.dialects.postgresql.arrayr3   Ú#sqlalchemy.dialects.postgresql.baser4   Ú%sqlalchemy.dialects.postgresql.hstorer5   Ú#sqlalchemy.dialects.postgresql.jsonr6   r7   r8   r9   r:   Úsqlalchemy.sql.schemar;   r<   Úsqlalchemy.sql.type_apir=   r>   Úautogenerate.apir?   Úautogenerate.renderr@   Úruntime.migrationrA   Ú	getLoggerr"  r’   rC   r…   r1  r3  r<  r@  Úregister_operationÚAddConstraintOpÚregister_add_constraintrN  Ú	renderersÚdispatch_forrr  Ú_constraint_renderersrw  r{  rq  r€  rH   rW   rU   ú<module>r´     s  ðõ #ã Û 	Ý Ý Ý Ý Ý Ý Ý Ý  Ý å Ý Ý %Ý Ý Ý (Ý 1Ý <Ý 2Ý )Ý 0Ý .Ý 4Ý %å Ý Ý Ý Ý $Ý #Ý Ý 'Ý Ý "Ý Ý Ý !Ý Ý "Ý -Ý (Ý Ý 'áÝå Ý+Ý:ÝAÝ<Ý8Ý9Ý5Ý5Ý3Ý.Ý+Ý2å$Ý1Ý-Ý4ð €g×Ñ˜Ó!€ôg
�[ô g
ôT˜;ô ñ 
ˆ+�|Ó$ðØðØ$1ðàòó %ðñ 
Ð
 Ó-ðØ!ðØ-:ðàòó .ðñ 
ˆ-˜Ó&ðØðØ&3ðàòó 'ðñ* 
Ð
 Ó.ðØ"ðØ.;òó /ððD €×ÑÐ:Ó;Ø#€×#Ñ#ØÐ!Bóð ×Ñ×,Ñ,Ð-AÓBôF% × 3Ñ 3ó F%ó Cóó <ð
F%ðR ×Ñ×ÑÐ8Ó9ðPØ#ðPØ)BðPàòPó :ðPð ×Ñ×*Ñ*Ð+<Ó=ðCØ!ðCà#ðCð !ðCð 	ò	Có >ðCóð<
Ø!ð<
à#ð<
ð ð<
ð 	ó	<
ð~
ðð
ð $ð	
ð
 	ô
rW   