Ë
    …V.j»t  ã                  óx  — d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z! ddl"m#Z# ddl"m$Z$ ddl"m%Z% ddl"m&Z& ddl"m'Z' ddl"m(Z( dd l"m)Z) dd!l"m*Z* dd"l"m+Z+ dd#l,m-Z- dd$l,m.Z. d%d&l/m0Z0 d%d'l1m2Z2 d%d(l3m4Z4 d%d)l3m5Z5 d%d*l6m7Z7 d%d+l6m8Z8 d%d,l0m9Z9 d%d-l:m;Z; erld d.lm<Z< d d/lm=Z= d d0lm>Z> d d1l?m@Z@ d d2lAmBZB d d3lCmDZD d d4lEmFZF d d5lEmGZG d d6lmHZH d d7lmIZI d d8lmJZJ d d9lKmLZL d d:lKmMZM d d;lNmOZO dd<l"mPZP d%d=lQmRZR d%d>lSmTZT d%d?lUmVZV  ej®                  eX«      ZY G d@„ dAe.«      ZZ G dB„ dCe%«      Z[ e;e+dD«      	 	 	 	 	 	 dSdE„«       Z\ e;e[dD«      	 	 	 	 	 	 dTdF„«       Z] e;e&dD«      	 	 	 	 	 	 dUdG„«       Z^ e;e*dD«      	 	 	 	 dVdH„«       Z_ e8jÀ                  dI«       e7jÀ                  dIdJ«      e4jÂ                  jÅ                  dK«       G dL„ dMe4jÂ                  «      «       «       «       Zce2jÈ                  jË                  ec«      	 	 	 	 	 	 dWdN„«       Zfe2jÎ                  jË                  e«      	 	 	 	 	 	 	 	 dXdO„«       ZhdYdP„Zi	 	 	 	 	 	 	 	 dZdQ„Zj	 	 	 	 	 	 d[dR„Zky)\é    )ÚannotationsN)ÚAny)Úcast)ÚDict)ÚList)ÚOptional)ÚSequence)ÚTuple)ÚTYPE_CHECKING)ÚUnion)ÚColumn)Úliteral_column)ÚNumeric)Útext)Útypes)ÚBIGINT)ÚExcludeConstraint)ÚINTEGER)ÚCreateIndex)ÚColumnClause)Ú
TextClause)ÚFunctionElement)ÚNULLTYPEé   )Úalter_column)Úalter_table)ÚAlterColumn)ÚColumnComment)Úformat_column_name)Úformat_table_name)Úformat_type)ÚIdentityColumnDefault)ÚRenameTable)ÚComparisonResult)ÚDefaultImplé   )Úutil)Úrender)Úops)Ú	schemaobj)ÚBatchOperations)Ú
Operations)Úsqla_compat)Úcompiles)ÚLiteral)ÚIndex)ÚUniqueConstraint)ÚARRAY)ÚPGDDLCompiler)ÚHSTORE)ÚJSON)ÚJSONB)ÚClauseElement)ÚColumnElement)Úquoted_name)ÚMetaData)ÚTable)Ú
TypeEngine)Ú_ServerDefault)ÚAutogenContext)Ú_f_name)ÚMigrationContextc                  óJ  ‡ — e Zd ZdZdZej                  ddhfz   Zdd„Zd„ Zd„ Z		 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Z
d	„ Zd
„ Z ej                  d«       ej                  d«       ej                  d«       ej                  d«       ej                  d«      fZdd„Z	 	 	 	 d d„Z	 	 	 	 	 	 d!d„Z	 	 	 	 	 	 d"d„Z	 	 	 	 	 	 d#d„Zd$d„Z	 	 d%	 	 	 	 	 	 	 	 	 d&ˆ fd„Z	 	 	 	 	 	 d'd„Z	 	 	 	 	 	 d(d„Z	 	 	 	 	 	 d)d„Z	 	 	 	 	 	 d*d„Z	 	 	 	 	 	 d+d„Zˆ xZS ),ÚPostgresqlImplÚ
postgresqlTÚFLOATzDOUBLE PRECISIONc                ó   — |j                   j                  dd «      xs d}|D ]N  }||j                  j                  vsŒ|j                  j	                  t        |t        j                  «      «       ŒP | j                  t        |fi |¤Ž«       y )NÚpostgresql_include© )
ÚkwargsÚgetÚtableÚcÚappend_columnr   ÚsqltypesÚNullTypeÚ_execr   )ÚselfÚindexÚkwrF   Úcols        úXC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\alembic/ddl/postgresql.pyÚcreate_indexzPostgresqlImpl.create_indexU   su   € ð #Ÿ\™\×-Ñ-Ð.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)rP   Ú
batch_implrJ   Ú
constraints       rT   Úprep_table_for_batchz#PostgresqlImpl.prep_table_for_batcha   s<   € Ø×+Ô+ˆJà—‘Ñ+Ø—O‘O z×'CÑ'CÒCà×$Ñ$ ZÕ0ñ ,rV   c                óÚ  — |j                   r||j                  j                  u ry|}||k(  }|ryd |||j                  fv r| S |j                  j                  }t        |t        «      rBt        |j                  t        «      st        j                  dd|«      }d|› d�}t        |«      }| j                  }|€J ‚|j                  t        j                  t        |«      |k(  «      «       S )NFz^'|'$Ú Ú')Úprimary_keyrJ   Ú_autoincrement_columnÚserver_defaultÚargÚ
isinstanceÚstrÚtyper   ÚreÚsubr   Ú
connectionÚscalarr-   Ú_select)	rP   Úinspector_columnÚmetadata_columnÚrendered_metadata_defaultÚrendered_inspector_defaultÚconn_col_defaultÚdefaults_equalÚmetadata_defaultÚconns	            rT   Úcompare_server_defaultz%PostgresqlImpl.compare_server_defaulti   s  € ð ×'Ò'Ø ?×#8Ñ#8×#NÑ#NÑNàà5Ðà)Ð-FÑFˆÙØàØØ%Ø×*Ñ*ð
ñ 
ð
 &Ð%Ð%à*×9Ñ9×=Ñ=ÐäÐ&¬Ô,ÜÐ.×3Ñ3´WÔ=Ü#%§6¡6¨(°BÐ8HÓ#IÐ Ø%&Ð'7Ð&8¸Ð#:Ð ä-Ð.>Ó?Ðð �‰ˆØÐÐÐØ—;‘;Ü×ÑÜÐ/Ó0Ð4DÑDóó
ð 
ð 	
rV   c                óÚ   •— |j                  dd «      }|�|€t        j                  d«      ‚|�"| j                  t	        ||||||	|
|¬«      «       t        ‰| �  ||f||||||	|
||dœ	|¤Ž y )NÚpostgresql_usingz6postgresql_using must be used with the type_ parameter)ÚschemaÚusingÚexisting_typeÚexisting_server_defaultÚexisting_nullable)	Únullablere   rZ   rz   Úautoincrementr|   r}   r~   Úexisting_autoincrement)Úpopr'   ÚCommandErrorrO   ÚPostgresqlColumnTypeÚsuperr   )rP   Ú
table_nameÚcolumn_namer   re   rZ   Útype_rz   r€   r|   r}   r~   r�   rR   r{   Ú	__class__s                  €rT   r   zPostgresqlImpl.alter_column–   s«   ø€ ð  —‘Ð)¨4Ó0ˆàÐ  Ü×#Ñ#ØHóð ð ÐØ�J‰JÜ$ØØØØ!ØØ"/Ø,CØ&7ô	ôô 	‰ÑØØð	
ð Ø)ØØØ'Ø'Ø$;Ø/Ø#9ñ	
ð ó	
rV   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Údefaultri   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   )ÚseqnamerZ   z^Detected sequence named '%s' as owned by integer column '%s(%s)', assuming SERIAL and omitting)rI   rg   r   r   rj   Úmatchr-   Ú_exec_on_inspectorr   ÚgroupÚfirstÚlogÚinforZ   )rP   Ú	inspectorrJ   Úcolumn_infoÚ	seq_matchr’   rŒ   Úcolnames           rT   Úautogen_column_reflectz%PostgresqlImpl.autogen_column_reflectÊ   sÚ   € Ø�?‰?˜9Ô%¬*Ø˜Ñ¤'¬6Ð!2ô+
ô Ÿ™Ø/°¸YÑ1GóˆIñ Ü"×5Ñ5ØÜð	;óð &ŸO™O¨AÓ.ô÷ ‘%“'ð ñ  Ø'+Ñ$�G˜WØ +¨fÑ"5Ò5ÜŸ™ð;ð $Ø!ŸJ™JØ#ôð (¨	Ñ2ð 6ð ð# ð+
Ð%rV   c                óØ   — |D �ch c]  }|j                   j                  d«      r|’Œ! }}|D ]  }|j                  |«       Œ t        j                  s| j                  ||«       y y c c}w )NÚduplicates_constraint)r’   rI   Úremover-   Úsqla_2Ú_skip_functional_indexes)rP   Úconn_unique_constraintsÚconn_indexesÚmetadata_unique_constraintsÚmetadata_indexesrQ   Údoubled_constraintsÚixs           rT   Úcorrect_for_autogen_constraintsz.PostgresqlImpl.correct_for_autogen_constraintsñ   su   € ñ &ó
á%�Ø�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Ú"ra   rb   Ú.z::z(::[\w ]+\w)r   Ú(éÿÿÿÿÚ)r   z	cast\s*\(zas\s+[^)]+\)Ú )ÚlowerÚreplacerJ   rZ   rj   rk   Ú_default_modifiers_reÚsearchÚspanÚcompiler�   )rP   rQ   ÚexprÚrsr�   ÚstartÚendÚcast_res           rT   Ú_cleanup_index_exprz"PostgresqlImpl._cleanup_index_expr  s�  € Ø�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 Ó$ˆØˆrV   c                ó<   — |j                   j                  d«      ryy)NÚpostgresql_nulls_not_distinct)Únulls_not_distinctrG   )Údialect_kwargsrI   )rP   Úitems     rT   Ú_dialect_optionszPostgresqlImpl._dialect_options9  s   € ð
 ×Ñ×"Ñ"Ð#BÔCØ*ØrV   c           
     ó  — g }| j                  ||«      }|r|j                  |«       |j                  }|j                  }t        |«      t        |«      k7  r)|j                  dt        |«      › dt        |«      › �«       |rt	        j
                  |«      S g }t        t        ||«      d«      D ]×  \  }\  }	}
| j                  |	«      }| j                  ||«      }| j                  |
«      }| j                  ||«      }||k(  rŒU|j                  «       j                  d«      rJd|v sd|v rB|j                  d|› d|›d�«       t        j                  d	|› d|›d
|j                  ›d�«       Œ¾|j                  d|› d|›d|›�«       ŒÙ | j                  |«      }| j                  |«      }||k7  r|j!                  d|› d|› �«       |rt	        j
                  |«      S |rt	        j"                  |«      S t	        j$                  «       S )Nzexpression number ú to r   Ú_opsrª   r©   zexpression #z' detected as including operator clause.zExpression #z
 in index a   detected to include an operator clause. Expression compare cannot proceed. Please move the operator clause to the ``postgresql_ops`` dict to enable proper compare of the index expressions: https://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#operator-classeszoptions )Ú_compare_index_uniqueÚappendÚexpressionsÚlenr$   Ú	DifferentÚ	enumerateÚzipÚ_compile_elementr¶   ÚstripÚendswithr'   ÚwarnrZ   r¼   ÚextendÚSkipÚEqual)rP   Úmetadata_indexÚreflected_indexÚmsgÚ
unique_msgÚm_exprsÚr_exprsÚskipÚposÚm_eÚr_eÚ	m_compileÚm_textÚ	r_compileÚr_textÚ	m_optionsÚ	r_optionss                    rT   Úcompare_indexeszPostgresqlImpl.compare_indexesB  s  € ð
 ˆØ×/Ñ/Ø˜Oó
ˆ
ñ Ø�J‰J�zÔ"Ø ×,Ñ,ˆØ!×-Ñ-ˆÜˆw‹<œ3˜w›<Ò'Ø�J‰JÐ+¬C°«L¨>¸¼cÀ'»l¸^ÐLÔMÙä#×-Ñ-¨cÓ2Ð2ØˆÜ(¬¨W°gÓ)>ÀÖB‰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  Cð8 ×)Ñ)¨.Ó9ˆ	Ø×)Ñ)¨/Ó:ˆ	Ø˜	Ò!Ø�J‰J˜ ) ¨D°°Ð<Ô=áÜ#×-Ñ-¨cÓ2Ð2Ùä#×(Ñ(¨Ó.Ð.ä#×)Ñ)Ó+Ð+rV   c                óŠ  — | j                  |«      }| j                  |«      }|j                  }|j                  }||k7  rt        j                  d|› d|› �«      S | j                  |j                  «      }| j                  |j                  «      }||k7  rt        j                  d|› d|› �«      S t        j                  «       S )Nzexpression r¾   )Ú_create_metadata_constraint_sigÚ _create_reflected_constraint_sigÚunnamedr$   rÄ   r¼   ÚconstrÍ   )	rP   Úmetadata_constraintÚreflected_constraintÚmetadata_tupÚreflected_tupÚmeta_sigÚconn_sigÚmetadata_doÚconn_dos	            rT   Úcompare_unique_constraintz(PostgresqlImpl.compare_unique_constraint~  sÙ   € ð
 ×;Ñ;Øó
ˆð ×=Ñ=Ø ó
ˆð  ×'Ñ'ˆØ ×(Ñ(ˆØ�xÒÜ#×-Ñ-Ø˜h˜Z t¨H¨:Ð6óð ð ×+Ñ+¨L×,>Ñ,>Ó?ˆØ×'Ñ'¨×(;Ñ(;Ó<ˆØ˜'Ò!Ü#×-Ñ-Ø˜g˜Y d¨;¨-Ð8óð ô  ×%Ñ%Ó'Ð'rV   c                óŒ   — |j                  di «      j                  «       }|j                  d«      s|j                  dd «       |S )NÚdialect_optionsrF   )rI   Úcopyr‚   )rP   Úreflected_optionsÚkindÚoptionss       rT   Ú adjust_reflected_dialect_optionsz/PostgresqlImpl.adjust_reflected_dialect_optionsš  sA   € ð $×'Ñ'Ð(9¸2Ó>×CÑCÓEˆØ�{‰{Ð/Ô0Ø�K‰KÐ,¨dÔ3ØˆrV   c                óz   — t        |t        «      r|S |j                  | j                  dddœ¬«      j                  S )NTF)Úliteral_bindsÚinclude_table)ÚdialectÚcompile_kwargs)rg   rh   r°   r÷   Ústring)rP   Úelements     rT   rÇ   zPostgresqlImpl._compile_element£  s=   € Ü�gœsÔ#ØˆNØ�‰Ø—L‘LØ-1ÀEÑJð ó 
÷ ‰&ð	rV   c                ón   •— |r t        |t        «      s|j                  «       }t        ‰| �  |f||dœ|¤ŽS )zdRender a SQL expression that is typically a server default,
        index expression, etc.

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

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

        e.g.::

            from alembic import op

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

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

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

        )Úinvoke)rY  Ú
operationsrP  r†   rQ  rR   r[  s          rT   rI  z3CreateExcludeConstraintOp.create_exclude_constraint™  s)   € ñV � *¨hÑ=¸"Ñ=ˆØ× Ñ  Ó$Ð$rV   c                ó”   — |j                   j                  |d<    | ||j                   j                  |fi |¤Ž}|j                  |«      S )a3  Issue a "create exclude constraint" instruction using the
        current batch migration context.

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

        .. seealso::

            :meth:`.Operations.create_exclude_constraint`

        rz   )r@  rz   r†   rg  )rY  rh  rP  rQ  rR   r[  s         rT   rJ  z9CreateExcludeConstraintOp.batch_create_exclude_constraintÇ  sE   € ð& "—‘×-Ñ-ˆˆ8‰Ù� *§/¡/×"<Ñ"<¸hÑMÈ"ÑMˆØ× Ñ  Ó$Ð$rV   )NNN)rP  zsqla_compat._ConstraintNamer†   zUnion[str, quoted_name]rQ  zIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]rR  z)Optional[Union[ColumnElement[bool], str]]rz   r  rS  zOptional[ExcludeConstraint]r  r  )r^   r   r  rM  rX   )r`  zOptional[MigrationContext]r  r   )rh  r,   rP  rh   r†   rh   rQ  r   rR   r   r  úOptional[Table])
rh  r+   rP  rh   rQ  r   rR   r   r  rj  )r!  r  r"  Ú__doc__Úconstraint_typer*  Úclassmethodr\  re  rI  rJ  rG   rV   rT   rM  rM  Q  s3  „ ñ ;à€Oð <@Ø $Ø8<ðà4ðð ,ðð
ð	ð 9ðð ðð 6ðð 
óð* ð
Ø*ð
à	"ò
ó ð
ð& ?CðØ!;ðà	óð, ð+%àð+%ð ð+%ð ð	+%ð
 ð+%ð ð+%ð 
ò+%ó ð+%ðZ ð%à#ð%ð ð%ð ð	%ð
 ð%ð 
ò%ó ñ%rV   rM  c                ó:   — t        |j                  «       | d¬«      S )NT)Úalter)Ú_exclude_constraintre  )r  r[  s     rT   Ú_add_exclude_constraintrq  ß  s   € ô ˜r×/Ñ/Ó1°?È$ÔOÐOrV   c                óV   — t        j                  d| |«      }|dur|S t        | |d«      S )NrN  F)r(   Ú_user_defined_renderrp  )r^   r  Únamespace_metadataÚrendereds       rT   Ú!_render_inline_exclude_constraintrv  æ  s9   € ô ×*Ñ*Ø�:˜ó€Hð �uÑØˆä˜z¨?¸EÓBÐBrV   c                óB   — | j                   }|�|j                  d«       y)Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)ÚimportsÚadd)r  rx  s     rT   Ú_postgresql_autogenerate_prefixrz  õ  s#   € Ø×%Ñ%€GØÐØ�‰Ð@ÔAØrV   c                ó  ‡ ‡‡— g Š‰j                   }‰ j                  r&‰j                  dt        ‰ j                  «      f«       ‰ j                  r&‰j                  dt        ‰ j                  «      f«       ‰ j
                  r&‰j                  dt        ‰ j
                  «      f«       |sR|rP‰ j                  j                  r:‰j                  dt        j                  ‰ j                  j                  «      f«       |s=‰ j                  r1‰j                  dt        j                  ‰‰ j                  «      f«       ˆˆ ˆfd„}|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 )NrU  rV  r{   rz   rZ   c            
     óT  •— ‰j                   D � ��cg c]  \  } }}dt        | ‰«      ›d|›d�‘Œ }}} }‰j                  �2|j                  dt	        j
                  ‰j                  ‰«      z  «       |j                  ‰D ��cg c]  \  }}|›d|›�‘Œ c}}«       |S c c}}} w c c}}w )Nr§   ú, r©   zwhere=%sÚ=)rX  Ú_render_potential_columnrR  rÁ   r(   Ú_render_potential_exprrË   )	ÚsqltextrZ   ÚopstringÚargsÚkÚvr  r^   Úoptss	         €€€rT   Údo_expr_where_optsz/_exclude_constraint.<locals>.do_expr_where_opts  s½   ø€ ð ,6×+CÒ+Cõ

ñ ,DÑ'�˜™xô )ØØ#õò òð ,Dð 	ò 

ð ×ÑÐ'Ø�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_batchrU  rÁ   rh   rV  r{   rJ   rz   r(   Ú_identrZ   Ú_render_gen_nameÚreprrË   Ú_alembic_autogenerate_prefixÚjoinrz  )r^   r  ro  Ú	has_batchr‡  rƒ  r†  s   ``    @rT   rp  rp  ü  s®  ú€ ð
 FH€Dà×*Ñ*€Ià×ÒØ�‰�\¤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ñ:
ñ 
ð 	
rV   c           	     óæ   — t        | t        «      r6| j                  rd}nd}|t        j                  |«      | j
                  dœz  S t        j                  | |t        | t        t        f«      ¬«      S )Nz"%(prefix)sliteral_column(%(name)r)z%(prefix)scolumn(%(name)r))rˆ  rZ   )Úwrap_in_text)	rg   r   Ú
is_literalr(   Ú_sqlalchemy_autogenerate_prefixrZ   r€  r   r   )Úvaluer  Útemplates      rT   r  r  ;  sr   € ô �%œÔ&Ø×Òà;‰Hà3ˆHàÜ×<Ñ<¸_ÓMØ—J‘Jñ
ñ 
ð 	
ô
 ×,Ñ,ØØÜ# E¬J¼Ð+HÓIô
ð 	
rV   )rú   r#   r/  r3   r  rh   )rú   r„   r/  r3   r  rh   )rú   r   r/  r3   r  rh   )rú   r"   r/  r3   )r  r>   r[  rM  r  rh   )r^   r   r  r>   rt  r:   r  rh   )r  r>   r  rh   )r^   r   r  r>   ro  r   r  rh   )r”  zGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]r  r>   r  rh   )lÚ
__future__r   Úloggingrj   Útypingr   r   r   r   r   r	   r
   r   r   Ú
sqlalchemyr   r   r   r   r   rM   Úsqlalchemy.dialects.postgresqlr   r   r   Úsqlalchemy.schemar   Úsqlalchemy.sql.elementsr   r   Úsqlalchemy.sql.functionsr   Úsqlalchemy.typesr   Úbaser   r   r   r   r   r    r!   r"   r#   r@  r$   r%   ra   r'   Úautogenerater(   rh  r)   r*   Úoperations.baser+   r,   r-   Úutil.sqla_compatr.   r/   r0   r1   Ú$sqlalchemy.dialects.postgresql.arrayr2   Ú#sqlalchemy.dialects.postgresql.baser3   Ú%sqlalchemy.dialects.postgresql.hstorer4   Ú#sqlalchemy.dialects.postgresql.jsonr5   r6   r7   r8   r9   Úsqlalchemy.sql.schemar:   r;   Úsqlalchemy.sql.type_apir<   r=   Úautogenerate.apir>   Úautogenerate.renderr?   Úruntime.migrationr@   Ú	getLoggerr!  r‘   rB   r„   r0  r2  r;  r?  Úregister_operationÚAddConstraintOpÚregister_add_constraintrM  Ú	renderersÚdispatch_forrq  Ú_constraint_renderersrv  rz  rp  r  rG   rV   rT   Ú<module>r³     s
  ðõ #ã Û 	Ý Ý Ý Ý Ý Ý Ý Ý  Ý å Ý %Ý Ý Ý (Ý 1Ý <Ý 2Ý )Ý 0Ý .Ý 4Ý %å Ý Ý Ý Ý $Ý #Ý Ý 'Ý Ý "Ý Ý Ý !Ý Ý "Ý -Ý (Ý Ý 'áÝå Ý+Ý:ÝAÝ<Ý8Ý9Ý5Ý5Ý3Ý.Ý+Ý2å$Ý1Ý-Ý4ð €g×Ñ˜Ó!€ô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óð<
Ø!ð<
à#ð<
ð ð<
ð 	ó	<
ð~
ðð
ð $ð	
ð
 	ô
rV   