
    Ng.                         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dS )
    N)AnyCallableDictTuple)
Comparator
Comparison	OperationOperatorStructuredQueryVisitorop_namereturnc                 0     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                  `    t          t          |           }d d                    |          S )N mapstrjoinr   args_r   s     j/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/query_constructors/myscale.pyfz_DEFAULT_COMPOSER.<locals>.f   s,    c4..7~~~""5)))    r   r   r   r   s   ` r   _DEFAULT_COMPOSERr      s6    * * * * * * * * Hr   c                 0     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                  d    t          t          |           } dd                    |           dS )N(,)r   r   s     r   r   z_FUNCTION_COMPOSER.<locals>.f+   s1    c4....CHHUOO....r   r   r   s   ` r   _FUNCTION_COMPOSERr$       s6    / / / / / / / / Hr   c                   4    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metadata_keyr   Nc                 V    t                                                       || _        d S )N)super__init__r0   )selfr0   	__class__s     r   r3   zMyScaleTranslator.__init__O   s'    (r   	operationc                       fd|j         D             }|j        }                     |             j        |         | S )Nc                 :    g | ]}|                               S  )accept).0argr4   s     r   
<listcomp>z5MyScaleTranslator.visit_operation.<locals>.<listcomp>T   s%    @@@S

4  @@@r   )	argumentsoperator_validate_funcmap_dict)r4   r6   r   funcs   `   r   visit_operationz!MyScaleTranslator.visit_operationS   sO    @@@@I,?@@@!D!!!"t}T"D))r   
comparisonc           	      "   d}t          j        d|j                  }|rCt          j        |d| j         d|                    d          dd          d|j                  }n| j         d|j         }|j        }|j        }t          |t                    rd	| d	n|}t          |t                    r+|                    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subr0   groupvalue
comparator
isinstancer   dictgetr   LIKErA   )r4   rD   regexmatchedattrrQ   comps          r   visit_comparisonz"MyScaleTranslator.visit_comparisonY   sJ   )J
(<==  	A6AD%AAa(8(82(>AAA$ DD '@@**>@@D $ *5# 6 6AEE eT"" 	Duyy'8'8F'B'B7777DC%-CCCE :?""(qt(((E"t}T"4///r   structured_queryc                 ~    t          |           |j        i }nd|j                            |           i}|j        |fS )N	where_str)printfilterr:   query)r4   r\   kwargss      r   visit_structured_queryz(MyScaleTranslator.visit_structured_queryu   sM     	"*FF!#3#:#A#A$#G#GHF%v--r   )r/   )!__name__
__module____qualname____doc__r
   r'   r(   r)   allowed_operatorsr   EQGTGTELTLTECONTAINrV   allowed_comparatorsr   r$   rA   r   r3   r	   r   rC   r   r[   r   r   rT   rc   __classcell__)r5   s   @r   r&   r&   2   s       PP!x{HLA. 	 	''..&&t,,''..((--((--))$//((--))$//..u55**733H) )S )$ ) ) ) ) ) )* *t * * * *0: 0$ 0 0 0 08. /.	sDy	. . . . . . . .r   r&   )rL   typingr   r   r   r   langchain_core.structured_queryr   r   r	   r
   r   r   r   r   r$   r&   r9   r   r   <module>rs      s   				 - - - - - - - - - - - -               s x    $     $K. K. K. K. K. K. K. K. K. K.r   