o
    EDi[                     @   s@  U d dl Z d dlmZmZmZmZ d dlmZmZ d dl	m
Z
 d dlmZ e eZi Zeeed f ed< dd	 ZG d
d de
eZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZ G d#d$ d$eZ!G d%d& d&eZ"G d'd( d(eZ#G d)d* d*eZ$G d+d, d,eZ%G d-d. d.eZ&G d/d0 d0eZ'G d1d2 d2e'Z(G d3d4 d4e'Z)G d5d6 d6e#Z*G d7d8 d8e"Z+G d9d: d:e!Z,G d;d< d<e%Z-G d=d> d>e&Z.d?ed@ee fdAdBZ/dS )C    N)TypeSequenceOptionalDict)ArgumentErrorSQLAlchemyError)SchemaEventTarget)	VisitableTableEngine
engine_mapc                 C   sJ   |du rdS |    }t|ttfrd| dd| dS | d| S )z
    Create a table parameter with a tuple or list correctly formatted
    :param expr_name: parameter
    :param value: string or tuple of strings to format
    :return: formatted parameter string
    N  z (,))strip
isinstancetuplelistjoin)	expr_namevaluev r   i/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_connect/cc_sqlalchemy/ddl/tableengine.py
tuple_expr   s   
r   c                   @   sR   e Zd ZdZdZe Ze ZdZdd Z	dd Z
dd Zd	efd
dZdd ZdS )r
   z
    SqlAlchemy Schema element to support ClickHouse table engines.  At the moment provides no real
    functionality other than the CREATE TABLE argument string
    r   c                 K   s   | t | j< d S N)r   __name__)clskwargsr   r   r   __init_subclass__&   s   zTableEngine.__init_subclass__c                 C   s4  t |  | jj| _| j d}g }| jD ]0}||d }|d u r1|| jv r'qtd| d| || j	v r@|
d| d q|
| q|rRdd| d| _g }| jD ]}||d }|d urq|
t| dd	| qWd
| j | _|r|  jdd| d7  _|r|  jd	d	| 7  _d S d S )Nz Table EnginezRequired engine parameter z not provided for '(z, r   _r   zEngine )r	   __init__	__class__r   name	arg_namespopoptional_args
ValueErrorquoted_argsappendr   arg_str
eng_paramsr   upperreplacefull_engine)selfr   te_nameengine_argsarg_namer   params
param_namer   r   r   r#   )   s6   





zTableEngine.__init__c                 C   s   | j S r   )r0   )r1   r   r   r   compileG   s   zTableEngine.compileprimary_keysc                 C   s   t d| j d)NzTable Engine z does not support primary keys)r   r%   )r1   r8   r   r   r   check_primary_keysJ      zTableEngine.check_primary_keysc                 K   s
   | |_ d S r   )engine)r1   parent_kwargsr   r   r   _set_parentM   s   
zTableEngine._set_parentN)r   
__module____qualname____doc__r&   setr*   r(   r-   r   r#   r7   r   r9   r>   r   r   r   r   r
      s    c                   @      e Zd ZdS )MemoryNr   r?   r@   r   r   r   r   rD   Q       rD   c                   @   rC   )LogNrE   r   r   r   r   rG   U   rF   rG   c                   @   rC   )	StripeLogNrE   r   r   r   r   rH   Y   rF   rH   c                   @   rC   )TinyLogNrE   r   r   r   r   rI   ]   rF   rI   c                   @   rC   )NullNrE   r   r   r   r   rJ   a   rF   rJ   c                   @   rC   )SetNrE   r   r   r   r   rK   e   rF   rK   c                       *   e Zd ZdgZddef fddZ  ZS )
Dictionary
dictionaryNc                       t  t  d S r   superr#   locals)r1   rN   r$   r   r   r#   m   r:   zDictionary.__init__r   r   r?   r@   r&   strr#   __classcell__r   r   rS   r   rM   i       rM   c                       s.   e Zd ZdgZddedef fddZ  ZS )Mergezdb_name, tables_regexpNdb_nametables_regexpc                    rO   r   rP   )r1   rY   rZ   rS   r   r   r#   u   r:   zMerge.__init__)NNrT   r   r   rS   r   rX   q   s     rX   c                       rL   )FilefmtNc                    rO   r   rP   )r1   r\   rS   r   r   r#   }   r:   zFile.__init__r   rT   r   r   rS   r   r[   y   rW   r[   c                	       sD   e Zd Zg dZddhZ		d	dedededef fddZ  ZS )
Distributed)clusterdatabasetablesharding_keypolicy_namera   rb   Nr^   r_   c                    rO   r   rP   )r1   r^   r_   r`   ra   rb   rS   r   r   r#      s   zDistributed.__init__NNNNN)r   r?   r@   r&   r(   rU   r#   rV   r   r   rS   r   r]      s    r]   c                	       s<   e Zd Zg dZ		d	dedededef fddZ  ZS )
	MergeTree)order_bypartition_keyprimary_key	sample_byNre   rg   partition_byrh   c                    $   |s	|s	t d dt t  d S Nz0Either PRIMARY KEY or ORDER BY must be specifiedr   rQ   r#   rR   )r1   re   rg   ri   rh   rS   r   r   r#         
zMergeTree.__init__)NNNN)r   r?   r@   r-   rU   r#   rV   r   r   rS   r   rd      s    rd   c                   @   rC   )SharedMergeTreeNrE   r   r   r   r   rn      rF   rn   c                   @   rC   )SummingMergeTreeNrE   r   r   r   r   ro      rF   ro   c                   @   rC   )AggregatingMergeTreeNrE   r   r   r   r   rp      rF   rp   c                       sL   e Zd ZdgZeeZejZ		d	dededededef
 fddZ	  Z
S )
ReplacingMergeTreeverNre   rg   ri   rh   c                    $   |s	|s	t d dt t  d S rk   rl   )r1   rr   re   rg   ri   rh   rS   r   r   r#      rm   zReplacingMergeTree.__init__rc   )r   r?   r@   r&   rB   r(   rd   r-   rU   r#   rV   r   r   rS   r   rq      s    rq   c                       sD   e Zd ZdgZejZ		d	dededededef
 fddZ  ZS )
CollapsingMergeTreesignNre   rg   ri   rh   c                    rs   rk   rl   )r1   ru   re   rg   ri   rh   rS   r   r   r#      rm   zCollapsingMergeTree.__init__rc   	r   r?   r@   r&   rd   r-   rU   r#   rV   r   r   rS   r   rt      s    rt   c                       sJ   e Zd ZddgZejZ		d
dedededededef fdd	Z  ZS )VersionedCollapsingMergeTreeru   versionNre   rg   ri   rh   c                    $   |s	|s	t d dt t  d S rk   rl   )r1   ru   rx   re   rg   ri   rh   rS   r   r   r#      rm   z%VersionedCollapsingMergeTree.__init__NNNNNNrv   r   r   rS   r   rw      s    rw   c                       sH   e Zd ZdgZejZ		d
dedededededef fdd	Z  ZS )GraphiteMergeTreeconfig_sectionNrx   re   rg   ri   rh   c                    ry   rk   rl   )r1   r|   rx   re   rg   ri   rh   rS   r   r   r#      rm   zGraphiteMergeTree.__init__rz   rv   r   r   rS   r   r{      s    r{   c                       sV   e Zd ZddgZeeZeZejZ		d
de	de	de	de	de	de	f fdd	Z
  ZS )ReplicatedMergeTreezk_pathreplicaNre   rg   ri   rh   c                    rj   rk   rl   )r1   re   rg   ri   rh   r~   r   rS   r   r   r#      rm   zReplicatedMergeTree.__init__rz   )r   r?   r@   r&   rB   r*   r(   rd   r-   rU   r#   rV   r   r   rS   r   r}      s    r}   c                   @   rC   )ReplicatedAggregatingMergeTreeNrE   r   r   r   r   r      rF   r   c                   @   rC   )ReplicatedSummingMergeTreeNrE   r   r   r   r   r      rF   r   c                   @   rC   )SharedReplacingMergeTreeNrE   r   r   r   r   r      rF   r   c                   @   rC   )SharedAggregatingMergeTreeNrE   r   r   r   r   r      rF   r   c                   @   rC   )SharedSummingMergeTreeNrE   r   r   r   r   r      rF   r   c                   @   rC   )"SharedVersionedCollapsingMergeTreeNrE   r   r   r   r   r      rF   r   c                   @   rC   )SharedGraphiteMergeTreeNrE   r   r   r   r   r      rF   r   r0   returnc                 C   sr   | sdS |  dd  dd }zt| }W n ty+   |ds(td| Y dS w ||}||_| |_|S )z
    Factory function to create TableEngine class from ClickHouse full_engine expression
    :param full_engine
    :return: TableEngine DDL element
    Nr   r   r!   SystemzEngine %s not found)	splitr   KeyError
startswithloggerwarning__new__r%   r0   )r0   r%   
engine_clsr;   r   r   r   build_engine   s   

r   )0loggingtypingr   r   r   r   sqlalchemy.excr   r   sqlalchemy.sql.baser   sqlalchemy.sql.visitorsr	   	getLoggerr   r   r   rU   __annotations__r   r
   rD   rG   rH   rI   rJ   rK   rM   rX   r[   r]   rd   rn   ro   rp   rq   rt   rw   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sH   
 
5
