o
    9f                     @   s   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 e eZedd edD Zdd Zejd D ]
Zedde qTdd Zedddd ZdS )    N)__version__)comparators)_compare_columns)ModifyTableOps)_reflect_table)schema)text)Table   )
operationsc                 c   s$    | ]}|  rt|n|V  qd S )N)isdigitint.0x r   b/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_sqlalchemy/alembic/comparators.py	<genexpr>   s    
r   .c                 C   sL   | }| d}|| dd|d |d  d}d|v r$|dd S |S )N(z TO r      r
   z `r   )indexstripsplit)create_table_queryquerybrace
inner_namer   r   r   _extract_to_table_name   s   
$r   )r   defaultr   
clickhousec                 C   s   t dkr	t| |S t| |d S )N)r
      r   )alembic_version_alembic_reflect_table)	inspectortabler   r   r   r   %   s   
r   c           !   	   C   s  | j }| j}| j}|j|tddd}| dk}td| |r'td ntd t|	|}|j
dt }	||d }
||d }t|	|D ]A}|j| }|
j|jdd	}td
| |sh|jrst|j||jj}n|j}||j}tj|j||g|jR  }|j| qNt }| j}||	}||	}i }||B r|j|tdt ||B d}dd |D }t|D ]H}td| || }zt!|j"}W n t#y   d }Y nw |rt$||j%|}nt&||}t'|| tj(||j%|j)g|jR  }|j| qt|D ]}|j| }|| }|s|jr%t!|j"}nd| }t&||}t'|| | *||dd|s@ d S |j| j}t+|g }d }t,|||||| | t-.d| ||||| W d    n	1 sow   Y  |/ s|
j|jdd	}||j}|s|jrt$||j%|j|t|j||jg} ntj0||j%|g|jR  |tj1|||g|jR  g} |j2|  qd S )NzFSELECT engine FROM system.databases WHERE database = currentDatabase()T)scalaratomiczDatabase engine: %sz/Using "TO table" for materialized views storagez8Using ".inner" for materialized views storage by default	mat_views)literal_bindsz#Detected added materialized view %szSELECT name, as_select, engine_full, create_table_query FROM system.tables WHERE database = currentDatabase() AND name IN :names)namesc                 S   s   i | ]}|j |qS r   )namer   r   r   r   
<dictcomp>q   s    z$compare_mat_view.<locals>.<dictcomp>z%Detected removed materialized view %sz.inner.mat_viewFr%   )3
connectiondialectmetadata_executer   lowerloggerinfosetget_view_names
setdefaultstatement_compilerddl_compilersorted
differencer(   processmv_selectabletor   CreateMatViewToTableOpr+   inner_tableengineCreateMatViewOpcolumnsopsappend	sa_schemaMetaDatar$   intersectionlistr   r   
ValueErrorDropMatViewToTableOp	as_selectr	   r   DropMatViewOpengine_fullrun_object_filtersr   r   r   dispatchis_emptyDetachMatViewOpAttachMatViewOpextend)!autogen_contextupgrade_opsschemasr.   r/   r0   database_engine	is_atomicall_mat_viewsmetadata_mat_viewsr8   r9   r+   view
selectablecreater@   rA   existing_metadatar$   removed_mat_viewsexisting_mat_viewsmat_view_params_by_namervparamsr   dropr%   
conn_tablemetadata_tablemodify_table_opsr   rD   r   r   r   compare_mat_view,   s
  	













	


ri   )loggingalembicr   r"   alembic.autogenerater   alembic.autogenerate.comparer   alembic.operations.opsr   alembic.util.sqla_compatr   r#   
sqlalchemyr   rF   r    clickhouse_sqlalchemy.sql.schemar	    r   	getLogger__name__r3   tupler   r   	_registrydefault_comparatordispatch_forri   r   r   r   r   <module>   s(    

