o
    8 ¾hˆ7  ã                   @  sª  d dl m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' erä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(lm5Z5 G d)d*„ d*e"ƒZ6G d+d,„ d,eeƒZ7G d-d.„ d.eeƒZ8e'e7d/ƒdPd5d6„ƒZ9e'e8d/ƒdQd7d8„ƒZ:e'ed/ƒdRd;d<„ƒZ;dSd?d@„Z<e'ed/ƒdTdBdC„ƒZ=e'ed/ƒdUdEdF„ƒZ>e'ed/ƒdVdHdI„ƒZ?e'ed/ƒdWdKdL„ƒZ@e'e d/ƒdXdNdO„ƒZAdS )Yé    )ÚannotationsN)ÚAny)ÚDict)ÚList)ÚOptional)ÚTYPE_CHECKING)ÚUnion)Útypes)ÚColumn)ÚCreateIndex)Ú
Executable)ÚClauseElementé   )Ú	AddColumn)Úalter_column)Úalter_table)ÚColumnDefault)Ú
ColumnName)ÚColumnNullable)Ú
ColumnType)Úformat_column_name)Úformat_server_default)Úformat_table_name)Úformat_type)ÚRenameTable)ÚDefaultImplé   )Úutil)Úsqla_compat)Úcompiles)ÚLiteral)ÚMSDDLCompiler)ÚMSSQLCompiler)ÚCursorResult)ÚIndex)ÚTable)ÚTableClause)Ú
TypeEngine)Ú_ServerDefaultc                	      sÖ   e Zd ZdZdZdZejddhf Zejd ZdB‡ fd	d
„Z	dC‡ fdd„Z
dBdd„ZdB‡ fdd„ZdddddddddœdD‡ fd(d)„ZdEd,d-„ZdF‡ fd2d3„Zdd4œdG‡ fd7d8„Zd9d:„ Z‡ fd;d<„ZdHd@dA„Z‡  ZS )IÚ	MSSQLImplÚmssqlTZGOÚVARCHARÚNVARCHAR)ÚminvalueÚmaxvalueÚ
nominvalueÚ
nomaxvalueÚcycleÚcacheÚreturnÚNonec                   s(   t ƒ j|i |¤Ž | j d| j¡| _d S )NZmssql_batch_separator)ÚsuperÚ__init__Úcontext_optsÚgetÚbatch_separator)ÚselfÚargÚkw©Ú	__class__© úY/var/www/html/figdemos/bartoux_crm/venv/lib/python3.10/site-packages/alembic/ddl/mssql.pyr6   B   s   
ÿzMSSQLImpl.__init__Ú	constructr   úOptional[CursorResult]c                   s6   t ƒ j|g|¢R i |¤Ž}| jr| jr|  | j¡ |S ©N)r5   Ú_execÚas_sqlr9   Ústatic_output)r:   rA   Úargsr<   Úresultr=   r?   r@   rD   H   s   zMSSQLImpl._execc                 C  s   |   d| j ¡ d S )NzBEGIN TRANSACTION)rF   Zcommand_terminator©r:   r?   r?   r@   Ú
emit_beginN   s   zMSSQLImpl.emit_beginc                   s.   t ƒ  ¡  | jr| jr|  | j¡ d S d S d S rC   )r5   Úemit_commitrE   r9   rF   rI   r=   r?   r@   rK   Q   s   
ÿzMSSQLImpl.emit_commitNF)ÚnullableÚserver_defaultÚnameÚtype_ÚschemaÚexisting_typeÚexisting_server_defaultÚexisting_nullableÚ
table_nameÚstrÚcolumn_namerL   úOptional[bool]rM   ú/Optional[Union[_ServerDefault, Literal[False]]]rN   úOptional[str]rO   úOptional[TypeEngine]rP   rQ   rR   úOptional[_ServerDefault]rS   r<   c                  s$  |d ur|d ur|}d }n"|d u rt  d¡‚n|
d ur&|d ur&|
}|}d }n	|d ur/t  d¡ d}t ||	¡s=t ||	¡rGd}||d< |	|d< tƒ j||f|||||
dœ|¤Ž |dur€|du r€|	dush|d u rr|  t	||d|ƒ¡ |d ur€tƒ j||||d	 |d urtƒ j||||d
 d S d S )NzhMS-SQL ALTER COLUMN operations with NULL or NOT NULL require the existing_type or a new type_ be passed.z«MS-SQL ALTER COLUMN operations that specify type_= should also specify a nullable= or existing_nullable= argument to avoid implicit conversion of NOT NULL columns to NULL.FTrM   rR   )rL   rO   rP   rQ   rS   úsys.default_constraints)rP   rM   )rP   rN   )
r   ÚCommandErrorÚwarnr   Z_server_default_is_identityZ_server_default_is_computedr5   r   rD   Ú_ExecDropConstraint)r:   rT   rV   rL   rM   rN   rO   rP   rQ   rR   rS   r<   Zused_defaultr=   r?   r@   r   V   s|   ÿÿÿÿÿþþùøüÿü
ÿÿzMSSQLImpl.alter_columnÚindexr$   c                 K  sd   |j  dd ¡pd}|jd usJ ‚|D ]}||jjvr$|j t|tjƒ¡ q|  t	|fi |¤Ž¡ d S )NÚmssql_includer?   )
Úkwargsr8   ÚtableÚcÚappend_columnr
   ÚsqltypesÚNullTyperD   r   )r:   r`   r<   ra   Úcolr?   r?   r@   Úcreate_index¯   s   €zMSSQLImpl.create_indexrc   úUnion[TableClause, Table]Úrowsú
List[dict]c                   sj   | j r(|  d| jj |¡ ¡ tƒ j||fi |¤Ž |  d| jj |¡ ¡ d S tƒ j||fi |¤Ž d S )NzSET IDENTITY_INSERT %s ONzSET IDENTITY_INSERT %s OFF)rE   rD   ÚdialectÚidentifier_preparerÚformat_tabler5   Úbulk_insert)r:   rc   rk   r<   r=   r?   r@   rp   º   s   ÿÿÿÿzMSSQLImpl.bulk_insert)rP   ÚcolumnúColumn[Any]c                  sˆ   |  dd¡}|r|  t||d|ƒ¡ |  dd¡}|r$|  t||d|ƒ¡ |  dd¡}|r5|  t|||ƒ¡ tƒ j||fd|i|¤Ž d S )NZmssql_drop_defaultFr\   Zmssql_drop_checkzsys.check_constraintsZmssql_drop_foreign_keyrP   )ÚpoprD   r_   Ú_ExecDropFKConstraintr5   Údrop_column)r:   rT   rq   rP   r<   Zdrop_defaultZ
drop_checkZdrop_fksr=   r?   r@   ru   Ê   s$   ÿÿÿÿzMSSQLImpl.drop_columnc                 C  s4   |d urt  dd|¡}|d urt  dd|¡}||kS )Nz[\(\) \"\']Ú )ÚreÚsub)r:   Úinspector_columnÚmetadata_columnÚrendered_metadata_defaultZrendered_inspector_defaultr?   r?   r@   Úcompare_server_defaultå   s   ÿÿz MSSQLImpl.compare_server_defaultc                   sH   t ƒ  ||¡\}}}|d u r|d ur|s|jd ur|jjrd}|||fS )NF)r5   Ú_compare_identity_defaultrq   Úprimary_key)r:   Zmetadata_identityZinspector_identityZdiffZignoredZis_alterr=   r?   r@   r}   û   s   
ÿÿ
ÿ
z#MSSQLImpl._compare_identity_defaultÚreflected_objectúDict[str, Any]Úkindc                 C  s@   |  di ¡ ¡ }|  d¡s| dd ¡ |  d¡s| dd ¡ |S )NÚdialect_optionsra   Zmssql_clustered)r8   Úcopyrs   )r:   r   r   Úoptionsr?   r?   r@   Ú adjust_reflected_dialect_options  s   

z*MSSQLImpl.adjust_reflected_dialect_options)r3   r4   )rA   r   r3   rB   )rT   rU   rV   rU   rL   rW   rM   rX   rN   rY   rO   rZ   rP   rY   rQ   rZ   rR   r[   rS   rW   r<   r   r3   r4   )r`   r$   r<   r   r3   r4   )rc   rj   rk   rl   r<   r   r3   r4   )rT   rU   rq   rr   rP   rY   r3   r4   )r   r€   r   rU   r3   r€   )Ú__name__Ú
__module__Ú__qualname__Z__dialect__Útransactional_ddlr9   r   Ztype_synonymsZidentity_attrs_ignorer6   rD   rJ   rK   r   ri   rp   ru   r|   r}   r…   Ú__classcell__r?   r?   r=   r@   r)   3   s4    
	

ò
Yûr)   c                   @  s   e Zd ZdZddd„ZdS )r_   FÚtnamerU   ÚcolnameúUnion[Column[Any], str]rO   rP   rY   r3   r4   c                 C  s   || _ || _|| _|| _d S rC   )r‹   rŒ   rO   rP   )r:   r‹   rŒ   rO   rP   r?   r?   r@   r6     s   
z_ExecDropConstraint.__init__N)
r‹   rU   rŒ   r   rO   rU   rP   rY   r3   r4   ©r†   r‡   rˆ   Úinherit_cacher6   r?   r?   r?   r@   r_     ó    r_   c                   @  s   e Zd ZdZdd
d„ZdS )rt   Fr‹   rU   rŒ   rr   rP   rY   r3   r4   c                 C  s   || _ || _|| _d S rC   )r‹   rŒ   rP   )r:   r‹   rŒ   rP   r?   r?   r@   r6   ,  s   
z_ExecDropFKConstraint.__init__N)r‹   rU   rŒ   rr   rP   rY   r3   r4   rŽ   r?   r?   r?   r@   rt   )  r   rt   r*   ÚelementÚcompilerr"   r3   rU   c                 K  sJ   | j | j| j| jf\}}}}d|||t|||ƒ|r |d dœ S ddœ S )Na  declare @const_name varchar(256)
select @const_name = QUOTENAME([name]) from %(type)s
where parent_object_id = object_id('%(schema_dot)s%(tname)s')
and col_name(parent_object_id, parent_column_id) = '%(colname)s'
exec('alter table %(tname_quoted)s drop constraint ' + @const_name)Ú.rv   )Útyper‹   rŒ   Útname_quotedÚ
schema_dot)rP   r‹   rŒ   rO   r   )r‘   r’   r<   rP   r‹   rŒ   rO   r?   r?   r@   Ú_exec_drop_col_constraint4  s    ü

ûü	ûür—   c                 K  sB   | j | j| j}}}d||t|||ƒ|r|d dœ S ddœ S )Nay  declare @const_name varchar(256)
select @const_name = QUOTENAME([name]) from
sys.foreign_keys fk join sys.foreign_key_columns fkc
on fk.object_id=fkc.constraint_object_id
where fkc.parent_object_id = object_id('%(schema_dot)s%(tname)s')
and col_name(fkc.parent_object_id, fkc.parent_column_id) = '%(colname)s'
exec('alter table %(tname_quoted)s drop constraint ' + @const_name)r“   rv   )r‹   rŒ   r•   r–   )rP   r‹   rŒ   r   )r‘   r’   r<   rP   r‹   rŒ   r?   r?   r@   Ú_exec_drop_col_fk_constraintM  s   

üú
üúr˜   r   r!   c                 K  s(   dt || j| jƒt|| jfi |¤Žf S )Nz%s %s)r   rT   rP   Úmssql_add_columnrq   ©r‘   r’   r<   r?   r?   r@   Úvisit_add_columna  s   þr›   rq   rr   c                 K  s   d| j |fi |¤Ž S )NzADD %s)Úget_column_specification)r’   rq   r<   r?   r?   r@   r™   i  s   r™   r   c                 K  s:   dt || j| jƒt|| jƒt|| jƒ| jrdf S df S )Nz%s %s %s %sÚNULLzNOT NULL)r   rT   rP   r   rV   r   rQ   rL   rš   r?   r?   r@   Úvisit_column_nullableo  s   

üürž   r   c                 K  ó*   dt || j| jƒt|| jƒt|| jƒf S )Nz%s ADD DEFAULT %s FOR %s)r   rT   rP   r   Údefaultr   rV   rš   r?   r?   r@   Úvisit_column_default{  s
   

ýr¡   r   c                 K  s*   dt || j| jƒt|| jƒt|| jƒf S )Nz$EXEC sp_rename '%s.%s', %s, 'COLUMN')r   rT   rP   r   rV   Únewnamerš   r?   r?   r@   Úvisit_rename_columnˆ  ó
   

ýr£   r   c                 K  rŸ   )Nz%s %s %s)r   rT   rP   r   rV   r   rO   rš   r?   r?   r@   Úvisit_column_type“  r¤   r¥   r   c                 K  s"   dt || j| jƒt || jd ƒf S )NzEXEC sp_rename '%s', %s)r   rT   rP   Znew_table_namerš   r?   r?   r@   Úvisit_rename_tablež  s   þr¦   )r‘   r_   r’   r"   r3   rU   )r‘   rt   r’   r"   r3   rU   )r‘   r   r’   r!   r3   rU   )r’   r!   rq   rr   r3   rU   )r‘   r   r’   r!   r3   rU   )r‘   r   r’   r!   r3   rU   )r‘   r   r’   r!   r3   rU   )r‘   r   r’   r!   r3   rU   )r‘   r   r’   r!   r3   rU   )BÚ
__future__r   rw   Útypingr   r   r   r   r   r   Ú
sqlalchemyr	   rf   Zsqlalchemy.schemar
   r   Zsqlalchemy.sql.baser   Zsqlalchemy.sql.elementsr   Úbaser   r   r   r   r   r   r   r   r   r   r   r   Úimplr   rv   r   r   Zutil.sqla_compatr   r    Zsqlalchemy.dialects.mssql.baser!   r"   Zsqlalchemy.engine.cursorr#   Úsqlalchemy.sql.schemar$   r%   Zsqlalchemy.sql.selectabler&   Úsqlalchemy.sql.type_apir'   r(   r)   r_   rt   r—   r˜   r›   r™   rž   r¡   r£   r¥   r¦   r?   r?   r?   r@   Ú<module>   sx    g


