o
    Zh.                     @   sx   d dl Z d dlmZmZmZmZ d dlmZmZm	Z	m
Z
mZmZ dedefddZdedefdd	ZG d
d deZdS )    N)AnyCallableDictTuple)
Comparator
Comparison	OperationOperatorStructuredQueryVisitorop_namereturnc                       dt dtf fdd}|S )z
    Default composer for logical operators.

    Args:
        op_name: Name of the operator.

    Returns:
        Callable that takes a list of arguments and returns a string.
    argsr   c                     s   t t| }d  d|S )N mapstrjoinr   args_r    e/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/query_constructors/myscale.pyf   s   
z_DEFAULT_COMPOSER.<locals>.fr   r   r   r   r   r   r   _DEFAULT_COMPOSER      r   c                    r   )z
    Composer for functions.

    Args:
        op_name: Name of the function.

    Returns:
        Callable that takes a list of arguments and returns a string.
    r   r   c                     s    t t| }  dd| dS )N(,)r   r   r   r   r   r   +   s   
z_FUNCTION_COMPOSER.<locals>.fr   r   r   r   r   _FUNCTION_COMPOSER    r   r"   c                       s  e Zd ZdZejejejgZ	 e	j
e	je	je	je	je	je	jgZejedejedejede	j
ede	jede	jede	jede	jed	e	jed
e	jedi
Zddeddf fddZdedefddZdedefddZdedeeef fddZ  Z S )MyScaleTranslatorzFTranslate `MyScale` internal query language elements to valid filters.ANDORNOT=>z>=<z<=hasZILIKEmetadatametadata_keyr   Nc                    s   t    || _d S )N)super__init__r,   )selfr,   	__class__r   r   r.   O   s   

zMyScaleTranslator.__init__	operationc                    s2    fdd|j D }|j} |  j| | S )Nc                    s   g | ]}|  qS r   )accept).0argr/   r   r   
<listcomp>T   s    z5MyScaleTranslator.visit_operation.<locals>.<listcomp>)	argumentsoperatorZ_validate_funcmap_dict)r/   r2   r   funcr   r6   r   visit_operationS   s   
z!MyScaleTranslator.visit_operation
comparisonc              	   C   s   d}t d|j}|r#t |d| j d|ddd  d|j}n	| j d|j }|j}|j}t|t	r=d	| d	n|}t|t
rY|d
dkrYd| d}d|d  d}|tju rhd|dd  d}| j| ||S )Nz	\((.*?)\)z\(\w+\)r   .r      r!   'typedatezparseDateTime32BestEffort(zparseDateTime32BestEffort('z')z'%z%')research	attributesubr,   groupvalueZ
comparator
isinstancer   dictgetr   LIKEr:   )r/   r=   regexZmatchedattrrI   compr   r   r   visit_comparisonY   s$    
z"MyScaleTranslator.visit_comparisonstructured_queryc                 C   s2   t | |jd u ri }nd|j| i}|j|fS )NZ	where_str)printfilterr3   query)r/   rR   kwargsr   r   r   visit_structured_queryu   s
   

z(MyScaleTranslator.visit_structured_query)r+   )!__name__
__module____qualname____doc__r	   r$   r%   r&   Zallowed_operatorsr   ZEQGTZGTELTZLTEZCONTAINrM   Zallowed_comparatorsr   r"   r:   r   r.   r   r   r<   r   rQ   r
   r   rK   rW   __classcell__r   r   r0   r   r#   2   s>    










r#   )rD   typingr   r   r   r   Zlangchain_core.structured_queryr   r   r   r	   r
   r   r   r   r"   r#   r   r   r   r   <module>   s     
