Class yii\sphinx\MatchBuilder

Inheritanceyii\sphinx\MatchBuilder » yii\base\BaseObject
Implementsyii\base\Configurable
Available since version2.0.6
Source Code https://github.com/yiisoft/yii2-sphinx/blob/master/MatchBuilder.php

MatchBuilder builds a MATCH SphinxQL expression based on the specification given as a yii\sphinx\MatchExpression object.

See also:

Public Properties

Hide inherited properties

Property Type Description Defined By
$db yii\sphinx\Connection The Sphinx connection. yii\sphinx\MatchBuilder
$matchBuilders array Map of MATCH keywords to builder methods. yii\sphinx\MatchBuilder
$matchOperators array Map of MATCH operators. yii\sphinx\MatchBuilder

Protected Properties

Hide inherited properties

Property Type Description Defined By

Public Methods

Hide inherited methods

Method Description Defined By
__call() Calls the named method which is not a class method. yii\base\BaseObject
__construct() Constructor. yii\sphinx\MatchBuilder
__get() Returns the value of an object property. yii\base\BaseObject
__isset() Checks if a property is set, i.e. defined and not null. yii\base\BaseObject
__set() Sets value of an object property. yii\base\BaseObject
__unset() Sets an object property to null. yii\base\BaseObject
build() Generates the MATCH expression from given yii\sphinx\MatchExpression object. yii\sphinx\MatchBuilder
buildAndMatch() Connects two or more MATCH expressions with the AND or OR operator yii\sphinx\MatchBuilder
buildHashMatch() Creates a MATCH based on column-value pairs. yii\sphinx\MatchBuilder
buildIgnoreMatch() Create ignored MATCH expressions yii\sphinx\MatchBuilder
buildMatch() Create MATCH expression. yii\sphinx\MatchBuilder
buildMultipleMatch() Create MAYBE, SENTENCE or PARAGRAPH expressions. yii\sphinx\MatchBuilder
buildProximityMatch() Create PROXIMITY expressions yii\sphinx\MatchBuilder
buildSimpleMatch() Creates an Match expressions like "column" operator value. yii\sphinx\MatchBuilder
buildZoneMatch() Create MATCH expressions for zones. yii\sphinx\MatchBuilder
canGetProperty() Returns a value indicating whether a property can be read. yii\base\BaseObject
canSetProperty() Returns a value indicating whether a property can be set. yii\base\BaseObject
className() Returns the fully qualified name of this class. yii\base\BaseObject
hasMethod() Returns a value indicating whether a method is defined. yii\base\BaseObject
hasProperty() Returns a value indicating whether a property is defined. yii\base\BaseObject
init() Initializes the object. yii\base\BaseObject

Protected Methods

Hide inherited methods

Method Description Defined By
buildMatchColumn() Created column as string for expression of MATCH yii\sphinx\MatchBuilder
buildMatchValue() Create placeholder for expression of MATCH yii\sphinx\MatchBuilder
parseParams() Returns the actual MATCH expression by inserting parameter values into the corresponding placeholders. yii\sphinx\MatchBuilder

Constants

Hide inherited constants

Constant Value Description Defined By
PARAM_PREFIX ':mp' The prefix for automatically generated query binding parameters. yii\sphinx\MatchBuilder

Property Details

Hide inherited properties

$db public property

The Sphinx connection.

public yii\sphinx\Connection $db null
$matchBuilders protected property

Map of MATCH keywords to builder methods. These methods are used by buildMatch() to build MATCH expression from array syntax.

protected array $matchBuilders = [
    
'AND' => 'buildAndMatch',
    
'OR' => 'buildAndMatch',
    
'IGNORE' => 'buildIgnoreMatch',
    
'PROXIMITY' => 'buildProximityMatch',
    
'MAYBE' => 'buildMultipleMatch',
    
'SENTENCE' => 'buildMultipleMatch',
    
'PARAGRAPH' => 'buildMultipleMatch',
    
'ZONE' => 'buildZoneMatch',
    
'ZONESPAN' => 'buildZoneMatch',
]
$matchOperators protected property

Map of MATCH operators. These operators are used for replacement of verbose operators.

protected array $matchOperators = [
    
'AND' => ' ',
    
'OR' => ' | ',
    
'NOT' => ' !',
    
'=' => ' ',
]

Method Details

Hide inherited methods

__call() public method

Defined in: yii\base\BaseObject::__call()

Calls the named method which is not a class method.

Do not call this method directly as it is a PHP magic method that will be implicitly called when an unknown method is being invoked.

public mixed __call ( $name, $params )
$name string

The method name

$params array

Method parameters

return mixed

The method return value

throws yii\base\UnknownMethodException

when calling unknown method

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() public method

Constructor.

public void __construct ( $connection, $config = [] )
$connection yii\sphinx\Connection

The Sphinx connection.

$config array

Name-value pairs that will be used to initialize the object properties

                public function __construct($connection, $config = [])
{
    $this->db = $connection;
    parent::__construct($config);
}

            
__get() public method

Defined in: yii\base\BaseObject::__get()

Returns the value of an object property.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $value = $object->property;.

See also __set().

public mixed __get ( $name )
$name string

The property name

return mixed

The property value

throws yii\base\UnknownPropertyException

if the property is not defined

throws yii\base\InvalidCallException

if the property is write-only

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public method

Defined in: yii\base\BaseObject::__isset()

Checks if a property is set, i.e. defined and not null.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing isset($object->property).

Note that if the property is not defined, false will be returned.

See also https://www.php.net/manual/en/function.isset.php.

public boolean __isset ( $name )
$name string

The property name or the event name

return boolean

Whether the named property is set (not null).

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() public method

Defined in: yii\base\BaseObject::__set()

Sets value of an object property.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $object->property = $value;.

See also __get().

public void __set ( $name, $value )
$name string

The property name or the event name

$value mixed

The property value

throws yii\base\UnknownPropertyException

if the property is not defined

throws yii\base\InvalidCallException

if the property is read-only

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() public method

Defined in: yii\base\BaseObject::__unset()

Sets an object property to null.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing unset($object->property).

Note that if the property is not defined, this method will do nothing. If the property is read-only, it will throw an exception.

See also https://www.php.net/manual/en/function.unset.php.

public void __unset ( $name )
$name string

The property name

throws yii\base\InvalidCallException

if the property is read only.

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
build() public method

Generates the MATCH expression from given yii\sphinx\MatchExpression object.

public string build ( $match )
$match yii\sphinx\MatchExpression

The yii\sphinx\MatchExpression object from which the MATCH expression will be generated.

return string

Generated MATCH expression.

                public function build($match)
{
    $params = $match->params;
    $expression = $this->buildMatch($match->match, $params);
    return $this->parseParams($expression, $params);
}

            
buildAndMatch() public method

Connects two or more MATCH expressions with the AND or OR operator

public string buildAndMatch ( $operator, $operands, &$params )
$operator string

The operator which is used for connecting the given operands

$operands array

The Match expressions to connect

$params array

The expression parameters to be populated

return string

The MATCH expression

                public function buildAndMatch($operator, $operands, &$params)
{
    $parts = [];
    foreach ($operands as $operand) {
        if (is_array($operand) || is_object($operand)) {
            $operand = $this->buildMatch($operand, $params);
        }
        if ($operand !== '') {
            $parts[] = $operand;
        }
    }
    if (empty($parts)) {
        return '';
    }
    return '(' . implode(')' . ($operator === 'OR' ? ' | ' : ' ') . '(', $parts) . ')';
}

            
buildHashMatch() public method

Creates a MATCH based on column-value pairs.

public string buildHashMatch ( $match, &$params )
$match array

The match condition

$params array

The expression parameters to be populated

return string

The MATCH expression

                public function buildHashMatch($match, &$params)
{
    $parts = [];
    foreach ($match as $column => $value) {
        $parts[] = $this->buildMatchColumn($column) . ' ' . $this->buildMatchValue($value, $params);
    }
    return count($parts) === 1 ? $parts[0] : '(' . implode(') (', $parts) . ')';
}

            
buildIgnoreMatch() public method

Create ignored MATCH expressions

public string buildIgnoreMatch ( $operator, $operands, &$params )
$operator string

The operator which is used for Create Match expressions

$operands array

The Match expressions

$params array

The expression parameters to be populated

return string

The MATCH expression

                public function buildIgnoreMatch($operator, $operands, &$params)
{
    if (!isset($operands[0], $operands[1])) {
        throw new InvalidParamException("Operator '$operator' requires two operands.");
    }
    list($column, $value) = $operands;
    return $this->buildMatchColumn($column, true) . ' ' . $this->buildMatchValue($value, $params);
}

            
buildMatch() public method

Create MATCH expression.

public string buildMatch ( $match, &$params )
$match string|array

MATCH specification.

$params array

The expression parameters to be populated

return string

The MATCH expression

                public function buildMatch($match, &$params)
{
    if (empty($match)) {
        return '';
    }
    if ($match instanceof Expression) {
        return $this->buildMatchValue($match, $params);
    }
    if (!is_array($match)) {
        return $match;
    }
    if (isset($match[0])) {
        // operator format: operator, operand 1, operand 2, ...
        $operator = strtoupper($match[0]);
        if (isset($this->matchBuilders[$operator])) {
            $method = $this->matchBuilders[$operator];
        } else {
            $method = 'buildSimpleMatch';
        }
        array_shift($match);
        return $this->$method($operator, $match, $params);
    }
    // hash format: 'column1' => 'value1', 'column2' => 'value2', ...
    return $this->buildHashMatch($match, $params);
}

            
buildMatchColumn() protected method

Created column as string for expression of MATCH

protected string buildMatchColumn ( $column, $ignored false )
$column string

Column specification.

$ignored boolean

Whether column should be specified as 'ignored'.

return string

The column statement.

                protected function buildMatchColumn($column, $ignored = false)
{
    if (empty($column)) {
        return '';
    }
    if ($column === '*') {
        return '@*';
    }
    return '@' . ($ignored ? '!' : '') . (strpos($column, ',') === false ? $column : '(' . $column . ')');
}

            
buildMatchValue() protected method

Create placeholder for expression of MATCH

protected string buildMatchValue ( $value, &$params )
$value string|array|yii\db\Expression
$params array

The expression parameters to be populated

return string

The MATCH expression

                protected function buildMatchValue($value, &$params)
{
    if (empty($value)) {
        return '""';
    }
    if ($value instanceof Expression) {
        $params = array_merge($params, $value->params);
        return $value->expression;
    }
    $parts = [];
    foreach ((array) $value as $v) {
        if ($v instanceof Expression) {
            $params = array_merge($params, $v->params);
            $parts[] = $v->expression;
        } else {
            $phName = self::PARAM_PREFIX . count($params);
            $parts[] = $phName;
            $params[$phName] = $v;
        }
    }
    return implode(' | ', $parts);
}

            
buildMultipleMatch() public method

Create MAYBE, SENTENCE or PARAGRAPH expressions.

public string buildMultipleMatch ( $operator, $operands, &$params )
$operator string

The operator which is used for Create Match expressions

$operands array

The Match expressions

$params array

The expression parameters to be populated

return string

The MATCH expression

                public function buildMultipleMatch($operator, $operands, &$params)
{
    if (count($operands) < 3) {
        throw new InvalidParamException("Operator '$operator' requires three or more operands.");
    }
    $column = array_shift($operands);
    $phNames = [];
    foreach ($operands as $operand) {
        $phNames[] = $this->buildMatchValue($operand, $params);
    }
    return $this->buildMatchColumn($column) . ' ' . implode(' ' . $operator . ' ', $phNames);
}

            
buildProximityMatch() public method

Create PROXIMITY expressions

public string buildProximityMatch ( $operator, $operands, &$params )
$operator string

The operator which is used for Create Match expressions

$operands array

The Match expressions

$params array

The expression parameters to be populated

return string

The MATCH expression

                public function buildProximityMatch($operator, $operands, &$params)
{
    if (!isset($operands[0], $operands[1], $operands[2])) {
        throw new InvalidParamException("Operator '$operator' requires three operands.");
    }
    list($column, $value, $proximity) = $operands;
    return $this->buildMatchColumn($column) . ' ' . $this->buildMatchValue($value, $params) . '~' . (int) $proximity;
}

            
buildSimpleMatch() public method

Creates an Match expressions like "column" operator value.

public string buildSimpleMatch ( $operator, $operands, &$params )
$operator string

The operator to use. Anything could be used e.g. >, <=, etc.

$operands array

Contains two column names.

$params array

The expression parameters to be populated

return string

The MATCH expression

throws yii\base\InvalidParamException

on invalid operands count.

                public function buildSimpleMatch($operator, $operands, &$params)
{
    if (count($operands) !== 2) {
        throw new InvalidParamException("Operator '$operator' requires two operands.");
    }
    list($column, $value) = $operands;
    if (isset($this->matchOperators[$operator])) {
        $operator = $this->matchOperators[$operator];
    }
    return $this->buildMatchColumn($column) . $operator . $this->buildMatchValue($value, $params);
}

            
buildZoneMatch() public method

Create MATCH expressions for zones.

public string buildZoneMatch ( $operator, $operands, &$params )
$operator string

The operator which is used for Create Match expressions

$operands array

The Match expressions

$params array

The expression parameters to be populated

return string

The MATCH expression

                public function buildZoneMatch($operator, $operands, &$params)
{
    if (!isset($operands[0])) {
        throw new InvalidParamException("Operator '$operator' requires exactly one operand.");
    }
    $zones = (array)$operands[0];
    return "$operator: (" . implode(',', $zones) . ")";
}

            
canGetProperty() public method

Defined in: yii\base\BaseObject::canGetProperty()

Returns a value indicating whether a property can be read.

A property is readable if:

  • the class has a getter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);

See also canSetProperty().

public boolean canGetProperty ( $name, $checkVars true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

return boolean

Whether the property can be read

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() public method

Defined in: yii\base\BaseObject::canSetProperty()

Returns a value indicating whether a property can be set.

A property is writable if:

  • the class has a setter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);

See also canGetProperty().

public boolean canSetProperty ( $name, $checkVars true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

return boolean

Whether the property can be written

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() public static method
Deprecated since 2.0.14. On PHP >=5.5, use ::class instead.

Defined in: yii\base\BaseObject::className()

Returns the fully qualified name of this class.

public static string className ( )
return string

The fully qualified name of this class.

                public static function className()
{
    return get_called_class();
}

            
hasMethod() public method

Defined in: yii\base\BaseObject::hasMethod()

Returns a value indicating whether a method is defined.

The default implementation is a call to php function method_exists(). You may override this method when you implemented the php magic method __call().

public boolean hasMethod ( $name )
$name string

The method name

return boolean

Whether the method is defined

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() public method

Defined in: yii\base\BaseObject::hasProperty()

Returns a value indicating whether a property is defined.

A property is defined if:

  • the class has a getter or setter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);

See also:

public boolean hasProperty ( $name, $checkVars true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

return boolean

Whether the property is defined

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() public method

Defined in: yii\base\BaseObject::init()

Initializes the object.

This method is invoked at the end of the constructor after the object is initialized with the given configuration.

public void init ( )

                public function init()
{
}

            
parseParams() protected method

Returns the actual MATCH expression by inserting parameter values into the corresponding placeholders.

protected string parseParams ( $expression, $params )
$expression string

The expression string which is needed to prepare.

$params array

The binding parameters for inserting.

return string

Parsed expression.

                protected function parseParams($expression, $params)
{
    if (empty($params)) {
        return $expression;
    }
    foreach ($params as $name => $value) {
        if (strncmp($name, ':', 1) !== 0) {
            $name = ':' . $name;
        }
        // unable to use `str_replace()` because particular param name may be a substring of another param name
        $pattern = "/" . preg_quote($name, '/') . '\b/';
        $value = '"' . $this->db->escapeMatchValue($value) . '"';
        $expression = preg_replace($pattern, $value, $expression, -1, $cnt);
    }
    return $expression;
}