
    e                         d dl mZ d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ  G d
 de
ej                  ZdS )   )exc)util)	coercions)elements)	operators)roles)_generative)
Generative)Selfc                   ~     e Zd ZdZdZdZ fdZedefd            Z	edefd            Z
edefd            Z xZS )	matcha[  Produce a ``MATCH (X, Y) AGAINST ('TEXT')`` clause.

    E.g.::

        from sqlalchemy import desc
        from sqlalchemy.dialects.mysql import match

        match_expr = match(
            users_table.c.firstname,
            users_table.c.lastname,
            against="Firstname Lastname",
        )

        stmt = (
            select(users_table)
            .where(match_expr.in_boolean_mode())
            .order_by(desc(match_expr))
        )

    Would produce SQL resembling::

        SELECT id, firstname, lastname
        FROM user
        WHERE MATCH(firstname, lastname) AGAINST (:param_1 IN BOOLEAN MODE)
        ORDER BY MATCH(firstname, lastname) AGAINST (:param_2) DESC

    The :func:`_mysql.match` function is a standalone version of the
    :meth:`_sql.ColumnElement.match` method available on all
    SQL expressions, as when :meth:`_expression.ColumnElement.match` is
    used, but allows to pass multiple columns

    :param cols: column expressions to match against

    :param against: expression to be compared towards

    :param in_boolean_mode: boolean, set "boolean mode" to true

    :param in_natural_language_mode: boolean , set "natural language" to true

    :param with_query_expansion: boolean, set "query expansion" to true

    .. versionadded:: 1.4.19

    .. seealso::

        :meth:`_expression.ColumnElement.match`

    mysql_matchTc                    |st          j        d          |                    dd           }|t          j        d          t          j        t
          j        |          }t          j        	                    t          j        |          }d|_        t          j        |                    dd          |                    dd          |                    dd          d	          }|r*t          j        d
d                    |          z            t!                                          ||t          j        |           d S )Nzcolumns are requiredagainstzagainst is required)clausesFin_boolean_modein_natural_language_modewith_query_expansion)mysql_boolean_modemysql_natural_languagemysql_query_expansionzunknown arguments: %sz, )	modifiers)r   ArgumentErrorpopr   expectr   ExpressionElementRoler   BooleanClauseList_construct_rawr   comma_opgroupr   immutabledictjoinsuper__init__match_op)selfcolskwr   leftflags	__class__s         Dlib/python3.11/site-packages/sqlalchemy/dialects/mysql/expression.pyr$   zmatch.__init__J   sA    	<#$:;;;&&D))?#$9:::"'
 

 )88 9 
 
 
"&(ff->&F&F*,&&.+ + *,0F)N)N 
 
  	O#$;tyy}}$MNNNw	(:eLLLLL    returnc                 H    | j                             ddi          | _         | S )zApply the "IN BOOLEAN MODE" modifier to the MATCH expression.

        :return: a new :class:`_mysql.match` instance with modifications
         applied.
        r   Tr   unionr&   s    r,   r   zmatch.in_boolean_model   s&     --/CT.JKKr-   c                 H    | j                             ddi          | _         | S )zApply the "IN NATURAL LANGUAGE MODE" modifier to the MATCH
        expression.

        :return: a new :class:`_mysql.match` instance with modifications
         applied.
        r   Tr0   r2   s    r,   r   zmatch.in_natural_language_modew   s&     --/G.NOOr-   c                 H    | j                             ddi          | _         | S )zApply the "WITH QUERY EXPANSION" modifier to the MATCH expression.

        :return: a new :class:`_mysql.match` instance with modifications
         applied.
        r   Tr0   r2   s    r,   r   zmatch.with_query_expansion   s&     --/F.MNNr-   )__name__
__module____qualname____doc____visit_name__inherit_cacher$   r	   r   r   r   r   __classcell__)r+   s   @r,   r   r      s        / /b #NM M  M  M  M  MD     [ 	$ 	 	 	 [	 d    [    r-   r   N) r   r   sqlr   r   r   r   sql.baser	   r
   util.typingr   BinaryExpressionr    r-   r,   <module>rB      s                                        # # # # # # " " " " " "      x x x x xJ1 x x x x xr-   