o
    EDil                     @   sD   d dl mZ d dlmZ d dlmZ d dlmZ G dd deZdS )    )CompileError)SQLCompiler)	ArrayJoin)format_tablec                       sf   e Zd ZdddZdddZdd Zd fdd	Zdd Zdd Zdd Z	dd Z
 fddZ  ZS )ChStatementCompilerNc                 K   s^   |j }dt| }|jd ur+d| _z|d| j|jfi | 7 }W d| _|S d| _w td)NzDELETE FROM Tz WHERE FzfClickHouse DELETE statements require a WHERE clause. To delete all rows, use 'TRUNCATE TABLE' instead.)tabler   whereclause_in_delete_whereprocessr   )selfdelete_stmtvisiting_ctekwr   text r   f/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_connect/cc_sqlalchemy/sql/compiler.pyvisit_delete   s   
z ChStatementCompiler.visit_deleteFc           	      K   sr   | j |jfd|d|}| j |jfi |}|jrdnd}| d| d| }|jr7|d| j|j 7 }|S )NT)asfromfrom_linterzLEFT ARRAY JOINz
ARRAY JOIN z AS )r
   leftarray_columnis_leftaliaspreparerquote)	r   array_join_clauser   r   r   r   	array_col	join_typer   r   r   r   visit_array_join   s   z$ChStatementCompiler.visit_array_joinc                 K   s   t |tr| j|fi |S | j|jfi |}| j|jfi |}|j}t|ddr.d}n|d u r5d}n|jr;d}nd}|| | }|d urT|d| j|fi | 7 }|S )NfullFz FULL OUTER JOIN z CROSS JOIN z LEFT OUTER JOIN z INNER JOIN z ON )	
isinstancer   r   r
   r   rightonclausegetattrisouter)r   joinr   r   r"   r#   join_kwr   r   r   r   
visit_join%   s    
zChStatementCompiler.visit_joinTr   c                    s6   t | ddr| j|jS t j|f|||d|S )Nr	   F)add_to_result_mapinclude_tableresult_map_targets)r$   r   r   namesupervisit_column)r   columnr)   r*   r+   ambiguous_table_name_mapr   	__class__r   r   r.   =   s   z ChStatementCompiler.visit_columnc                 K      t d)Nz8ClickHouse doesn't support DELETE with extra FROM clauseNotImplementedError)r   r   
from_tableextra_froms
from_hintsr   r   r   r   delete_extra_from_clauseJ      z,ChStatementCompiler.delete_extra_from_clausec                 K   r3   )Nz2ClickHouse doesn't support UPDATE with FROM clauser4   )r   update_stmtr6   r7   r8   r   r   r   r   update_from_clauseM   r:   z&ChStatementCompiler.update_from_clausec                 K   s   dS )NzSELECT 1 WHERE 1=0r   )r   element_typesr   r   r   r   visit_empty_set_exprQ   s   z(ChStatementCompiler.visit_empty_set_exprc                 K   r3   )Nz$ClickHouse doesn't support sequencesr4   )r   sequencer   r   r   r   visit_sequenceT   r:   z"ChStatementCompiler.visit_sequencec                    s   |dkrdS t  ||S )NFINAL)r-   get_from_hint_text)r   r   r   r1   r   r   rB   W   s   z&ChStatementCompiler.get_from_hint_text)N)FN)NTr   N)__name__
__module____qualname__r   r   r(   r.   r9   r<   r>   r@   rB   __classcell__r   r   r1   r   r   	   s    


r   N)	sqlalchemy.excr   sqlalchemy.sql.compilerr    clickhouse_connect.cc_sqlalchemyr   $clickhouse_connect.cc_sqlalchemy.sqlr   r   r   r   r   r   <module>   s
    