
    dh                     N    S SK JrJrJr  S SKJrJrJrJrJ	r	J
r
   " S S\
5      rg)    )AnyDictTuple)
Comparator
Comparison	OperationOperatorStructuredQueryVisitorc                   h   \ rS rSr% Sr\R                  \R                  /r \	R                  \	R                  \	R                  \	R                  \	R                  \	R                  \	R                   /r Sr\\S'   S\	S\4S jrS\S\4S	 jrS
\S\4S jrS\S\4S jrS\S\\\\\4   4   4S jrSr g)SupabaseVectorTranslator   z:Translate Langchain filters to Supabase PostgREST filters.metadatametadata_column
comparatorreturnc                 ,   [         R                  S[         R                  S[         R                  S[         R                  S[         R
                  S[         R                  S[         R                  S0R                  U5      nUc  [        SU S	35      eU$ )
z
Maps Langchain comparator to PostgREST comparator:

https://postgrest.org/en/stable/references/api/tables_views.html#operators
eqneqgtgteltltelikezComparator 'z/' is not currently supported in Supabase Vector)
r   EQNEGTGTELTLTELIKEget	Exception)selfr   postgrest_comparators      g/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/query_constructors/supabase.py_map_comparator(SupabaseVectorTranslator._map_comparator    s     MM4MM5MM4NNEMM4NNEOOV 
 #j/ 	  'zl +/ / 
 $#    valuec                 0    [        U[        5      (       a  gg)Nz->>z->)
isinstancestr)r$   r*   s     r&   _get_json_operator+SupabaseVectorTranslator._get_json_operator8   s    eS!!r)   	operationc                     UR                    Vs/ sH  o"R                  U 5      PM     nnUR                  R                   SSR	                  U5       S3$ s  snf )N(,))	argumentsacceptoperatorr*   join)r$   r0   argargss       r&   visit_operation(SupabaseVectorTranslator.visit_operation>   sT    ,5,?,?@,?S

4 ,?@$$**+1SXXd^,<A>> As   A
comparisonc                    [        UR                  [        5      (       a^  U R                  [	        [
        R                  UR                   Vs/ sH"  n[        UR                  UR                  US9PM$     snS95      $ SR                  U R                   U R                  UR                  5       UR                   3U R                  UR                  5       UR                   /5      $ s  snf )N)r   	attributer*   )r7   r5   .)r,   r*   listr;   r   r	   ANDr   r   r?   r8   r   r.   r'   )r$   r=   r*   s      r&   visit_comparison)SupabaseVectorTranslator.visit_comparisonB   s    j&&--''%\\ &0%5%5 &6E #'1'<'<&0&:&:"'
 &6
  xx''()@)@AQAQ)R(ST^ThThSij''
(=(=>?##$
 	
s   (C*structured_queryc                 x    UR                   c  0 nOSUR                   R                  U 5      0nUR                  U4$ )Npostgrest_filter)filterr6   query)r$   rE   kwargss      r&   visit_structured_query/SupabaseVectorTranslator.visit_structured_queryZ   sB     ""*F(*:*A*A*H*H*NOF%%v--r)    N)!__name__
__module____qualname____firstlineno____doc__r	   rB   ORallowed_operatorsr   r   r   r   r   r   r    r!   allowed_comparatorsr   r-   __annotations__r'   r   r.   r   r;   r   rC   r
   r   r   rK   __static_attributes__rM   r)   r&   r   r      s    D!x{{3. 	 1%OS%$* $ $0  ? ?s ?
: 
# 
0. /.	sDcN"	#.r)   r   N)typingr   r   r   langchain_core.structured_queryr   r   r   r	   r
   r   r   rM   r)   r&   <module>rZ      s#    # # T.w T.r)   