
    h.                     z    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ZdedefdZ G d d	e      Zy)
    N)AnyCallableDictTuple)
Comparator
Comparison	OperationOperatorStructuredQueryVisitorop_namereturnc                 ,     dt         dt        f f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                  N    t        t        |       }d dj                  |      S )N mapstrjoinr   args_r   s     l/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/query_constructors/myscale.pyfz_DEFAULT_COMPOSER.<locals>.f   s'    c4.7)1~""5))    r   r   r   r   s   ` r   _DEFAULT_COMPOSERr      s    * * * Hr   c                 ,     dt         dt        f fd}|S )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                  R    t        t        |       } ddj                  |       dS )N(,)r   r   s     r   r   z_FUNCTION_COMPOSER.<locals>.f+   s*    c4.!CHHUO,A..r   r   r   s   ` r   _FUNCTION_COMPOSERr$       s    / / / Hr   c                       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ZdedefdZdedefdZdedeeef   fdZ xZ S )MyScaleTranslatorzFTranslate `MyScale` internal query language elements to valid filters.ANDORNOT=>z>=<z<=hasILIKEmetadata_keyr   Nc                 0    t         |           || _        y N)super__init__r/   )selfr/   	__class__s     r   r3   zMyScaleTranslator.__init__O   s    (r   	operationc                     |j                   D cg c]  }|j                  |        }}|j                  }| j                  |        | j                  |   | S c c}w r1   )	argumentsacceptoperator_validate_funcmap_dict)r4   r6   argr   funcs        r   visit_operationz!MyScaleTranslator.visit_operationS   sY    ,5,?,?@S

4 @@!!D!"t}}T"D)) As   A
comparisonc           	      2   d}t        j                  d|j                        }|rEt        j                  |d| j                   d|j                  d      dd  d|j                        }n| j                   d|j                   }|j                  }|j                  }t        |t              rd	| d	n|}t        |t              r#|j                  d
      dk(  rd| d}d|d    d}|t        j                  u r	d|dd  d} | j                  |   ||      S )Nz	\((.*?)\)z\(\w+\)r!   .r      r#   'typedatezparseDateTime32BestEffort(zparseDateTime32BestEffort('z')z'%z%')research	attributesubr/   groupvalue
comparator
isinstancer   dictgetr   LIKEr<   )r4   r@   regexmatchedattrrM   comps          r   visit_comparisonz"MyScaleTranslator.visit_comparisonY   s*   ))J
(<(<= 66D%%&aa(82(>'?qA$$D ''(**>*>)?@D  $$ *5# 6!E7!E eT"uyy'8F'B/vQ7D1%-CE :??"qR(E"t}}T"4//r   structured_queryc                     t        |       |j                  i }nd|j                  j                  |       i}|j                  |fS )N	where_str)printfilterr9   query)r4   rX   kwargss      r   visit_structured_queryz(MyScaleTranslator.visit_structured_queryu   sK     	""*F!#3#:#:#A#A$#GHF%%v--r   )metadata)!__name__
__module____qualname____doc__r
   r'   r(   r)   allowed_operatorsr   EQGTGTELTLTECONTAINrR   allowed_comparatorsr   r$   r<   r   r3   r	   r   r?   r   rW   r   r   rP   r_   __classcell__)r5   s   @r   r&   r&   2   sW   P!x{{HLLA. 	 	'.&t,'.(-(-)$/(-)$/.u5*73H)S )$ )* *t *0: 0$ 08. /.	sDy	.r   r&   )rH   typingr   r   r   r   langchain_core.structured_queryr   r   r	   r
   r   r   r   r   r$   r&    r   r   <module>rq      sL    	 - - s x $  $K. K.r   