Class yii\sphinx\MatchBuilder
Inheritance | yii\sphinx\MatchBuilder » yii\base\BaseObject |
---|---|
Implements | yii\base\Configurable |
Available since version | 2.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
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 |
Public 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
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
Constant | Value | Description | Defined By |
---|---|---|---|
PARAM_PREFIX | ':mp' | The prefix for automatically generated query binding parameters. | yii\sphinx\MatchBuilder |
Property Details
Map of MATCH keywords to builder methods. These methods are used by buildMatch() to build MATCH expression from array syntax.
'AND' => 'buildAndMatch',
'OR' => 'buildAndMatch',
'IGNORE' => 'buildIgnoreMatch',
'PROXIMITY' => 'buildProximityMatch',
'MAYBE' => 'buildMultipleMatch',
'SENTENCE' => 'buildMultipleMatch',
'PARAGRAPH' => 'buildMultipleMatch',
'ZONE' => 'buildZoneMatch',
'ZONESPAN' => 'buildZoneMatch',
]
Map of MATCH operators. These operators are used for replacement of verbose operators.
Method Details
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()");
}
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);
}
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);
}
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.
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;
}
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);
}
}
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.
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);
}
}
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);
}
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) . ')';
}
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) . ')';
}
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);
}
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);
}
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 . ')');
}
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);
}
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);
}
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;
}
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. |
$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);
}
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) . ")";
}
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);
}
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);
}
::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();
}
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);
}
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);
}
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()
{
}
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;
}