o
    ïÇ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d@‡ fd	d
„Z	dA‡ fdd„Z
d@dd„Zd@‡ fdd„Z								dBdC‡ fd'd(„ZdDd+d,„ZdE‡ fd1d2„Z	dFdG‡ fd5d6„Zd7d8„ Z‡ fd9d:„ZdHd>d?„Z‡  ZS )IÚ	MSSQLImplÚmssqlTÚGOÚVARCHARÚNVARCHAR)ÚminvalueÚmaxvalueÚ
nominvalueÚ
nomaxvalueÚcycleÚcacheÚreturnÚNonec                   s(   t ƒ j|i |¤Ž | j d| j¡| _d S )NÚmssql_batch_separator)ÚsuperÚ__init__Úcontext_optsÚgetÚbatch_separator)ÚselfÚargÚkw©Ú	__class__© úe/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/alembic/ddl/mssql.pyr8   B   s   
ÿzMSSQLImpl.__init__Ú	constructr   úOptional[CursorResult]c                   s6   t ƒ j|g|¢R i |¤Ž}| jr| jr|  | j¡ |S ©N)r7   Ú_execÚas_sqlr;   Ústatic_output)r<   rC   Úargsr>   Úresultr?   rA   rB   rF   H   s   zMSSQLImpl._execc                 C  s   |   d| j ¡ d S )NzBEGIN TRANSACTION)rH   Úcommand_terminator©r<   rA   rA   rB   Ú
emit_beginN   s   zMSSQLImpl.emit_beginc                   s.   t ƒ  ¡  | jr| jr|  | j¡ d S d S d S rE   )r7   Úemit_commitrG   r;   rH   rL   r?   rA   rB   rN   Q   s   
ÿzMSSQLImpl.emit_commitNFÚ
table_nameÚstrÚcolumn_nameÚnullableúOptional[bool]Úserver_defaultú/Optional[Union[_ServerDefault, Literal[False]]]ÚnameúOptional[str]Útype_úOptional[TypeEngine]ÚschemaÚexisting_typeÚexisting_server_defaultúOptional[_ServerDefault]Úexisting_nullabler>   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.FTrT   r\   )rR   rX   rZ   r[   r^   úsys.default_constraints)rZ   rT   )rZ   rV   )
r   ÚCommandErrorÚwarnr   Ú_server_default_is_identityÚ_server_default_is_computedr7   r   rF   Ú_ExecDropConstraint)r<   rO   rQ   rR   rT   rV   rX   rZ   r[   r\   r^   r>   Úused_defaultr?   rA   rB   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_includerA   )
Úkwargsr:   ÚtableÚcÚappend_columnr
   ÚsqltypesÚNullTyperF   r   )r<   rf   r>   rg   ÚcolrA   rA   rB   Úcreate_index®   s   €zMSSQLImpl.create_indexri   ú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)rG   rF   ÚdialectÚidentifier_preparerÚformat_tabler7   Úbulk_insert)r<   ri   rq   r>   r?   rA   rB   rv   ¹   s   ÿÿÿÿzMSSQLImpl.bulk_insertÚ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 )NÚmssql_drop_defaultFr_   Úmssql_drop_checkzsys.check_constraintsÚmssql_drop_foreign_keyrZ   )ÚpoprF   rd   Ú_ExecDropFKConstraintr7   Údrop_column)r<   rO   rw   rZ   r>   Údrop_defaultÚ
drop_checkÚdrop_fksr?   rA   rB   r~   É   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_defaultÚrendered_inspector_defaultrA   rA   rB   Ú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)r7   Ú_compare_identity_defaultrw   Úprimary_key)r<   Úmetadata_identityÚinspector_identityÚdiffÚignoredÚis_alterr?   rA   rB   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_optionsrg   Úmssql_clustered)r:   Úcopyr|   )r<   r‘   r“   ÚoptionsrA   rA   rB   Ú adjust_reflected_dialect_options  s   

z*MSSQLImpl.adjust_reflected_dialect_options)r4   r5   )rC   r   r4   rD   )NFNNNNNN)rO   rP   rQ   rP   rR   rS   rT   rU   rV   rW   rX   rY   rZ   rW   r[   rY   r\   r]   r^   rS   r>   r   r4   r5   )rf   r$   r>   r   r4   r5   )ri   rp   rq   rr   r>   r   r4   r5   rE   )rO   rP   rw   rx   rZ   rW   r4   r5   )r‘   r’   r“   rP   r4   r’   )Ú__name__Ú
__module__Ú__qualname__Ú__dialect__Útransactional_ddlr;   r   Útype_synonymsÚidentity_attrs_ignorer8   rF   rM   rN   r   ro   rv   r~   r‰   rŠ   r˜   Ú__classcell__rA   rA   r?   rB   r)   3   s4    
	
	ó
Xür)   c                   @  s   e Zd ZdZddd„ZdS )rd   FÚtnamerP   ÚcolnameúUnion[Column[Any], str]rX   rZ   rW   r4   r5   c                 C  s   || _ || _|| _|| _d S rE   )r¡   r¢   rX   rZ   )r<   r¡   r¢   rX   rZ   rA   rA   rB   r8     s   
z_ExecDropConstraint.__init__N)
r¡   rP   r¢   r£   rX   rP   rZ   rW   r4   r5   ©r™   rš   r›   Úinherit_cacher8   rA   rA   rA   rB   rd     ó    rd   c                   @  s   e Zd ZdZdd
d„ZdS )r}   Fr¡   rP   r¢   rx   rZ   rW   r4   r5   c                 C  s   || _ || _|| _d S rE   )r¡   r¢   rZ   )r<   r¡   r¢   rZ   rA   rA   rB   r8   *  s   
z_ExecDropFKConstraint.__init__N)r¡   rP   r¢   rx   rZ   rW   r4   r5   r¤   rA   rA   rA   rB   r}   '  r¦   r}   r*   ÚelementÚcompilerr"   r4   rP   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)Ú.r‚   )Útyper¡   r¢   Útname_quotedÚ
schema_dot)rZ   r¡   r¢   rX   r   )r§   r¨   r>   rZ   r¡   r¢   rX   rA   rA   rB   Ú_exec_drop_col_constraint2  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©   r‚   )r¡   r¢   r«   r¬   )rZ   r¡   r¢   r   )r§   r¨   r>   rZ   r¡   r¢   rA   rA   rB   Ú_exec_drop_col_fk_constraintK  s   

üú
üúr®   r   r!   c                 K  s(   dt || j| jƒt|| jfi |¤Žf S )Nz%s %s)r   rO   rZ   Úmssql_add_columnrw   ©r§   r¨   r>   rA   rA   rB   Úvisit_add_column_  s   þr±   rw   rx   c                 K  s   d| j |fi |¤Ž S )NzADD %s)Úget_column_specification)r¨   rw   r>   rA   rA   rB   r¯   g  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   rO   rZ   r   rQ   r   r[   rR   r°   rA   rA   rB   Úvisit_column_nullablem  s   

üür´   r   c                 K  ó*   dt || j| jƒt|| jƒt|| jƒf S )Nz%s ADD DEFAULT %s FOR %s)r   rO   rZ   r   Údefaultr   rQ   r°   rA   rA   rB   Úvisit_column_defaulty  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   rO   rZ   r   rQ   Únewnamer°   rA   rA   rB   Úvisit_rename_column†  ó
   

ýr¹   r   c                 K  rµ   )Nz%s %s %s)r   rO   rZ   r   rQ   r   rX   r°   rA   rA   rB   Ú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   rO   rZ   Únew_table_namer°   rA   rA   rB   Úvisit_rename_tableœ  s   þr½   )r§   rd   r¨   r"   r4   rP   )r§   r}   r¨   r"   r4   rP   )r§   r   r¨   r!   r4   rP   )r¨   r!   rw   rx   r4   rP   )r§   r   r¨   r!   r4   rP   )r§   r   r¨   r!   r4   rP   )r§   r   r¨   r!   r4   rP   )r§   r   r¨   r!   r4   rP   )r§   r   r¨   r!   r4   rP   )BÚ
__future__r   rƒ   Útypingr   r   r   r   r   r   Ú
sqlalchemyr	   rl   Úsqlalchemy.schemar
   r   Úsqlalchemy.sql.baser   Úsqlalchemy.sql.elementsr   Úbaser   r   r   r   r   r   r   r   r   r   r   r   Úimplr   r‚   r   r   Úutil.sqla_compatr   r    Úsqlalchemy.dialects.mssql.baser!   r"   Úsqlalchemy.engine.cursorr#   Úsqlalchemy.sql.schemar$   r%   Úsqlalchemy.sql.selectabler&   Úsqlalchemy.sql.type_apir'   r(   r)   rd   r}   r­   r®   r±   r¯   r´   r·   r¹   r»   r½   rA   rA   rA   rB   Ú<module>   sx    e


