b374k
m1n1 1.01
Apache/2.4.41 (Ubuntu)
Linux vmi616275.contaboserver.net 5.4.0-84-generic #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 x86_64
uid=33(www-data) gid=33(www-data) groups=33(www-data)
server ip : 62.171.164.128 | your ip : 127.0.0.1
safemode OFF
 >  / home / a / home / dev2.destoffenstraat.com / app / code / Mirasvit / SearchSphinx / SphinxQL /
Filename/home/a/home/dev2.destoffenstraat.com/app/code/Mirasvit/SearchSphinx/SphinxQL/Helper.php_
Size7.27 kb
Permissionrwxrwxrwx
Ownerroot : root
Create time21-Aug-2025 12:26
Last modified15-Oct-2024 20:30
Last accessed23-Aug-2025 08:59
Actionsedit | rename | delete | download (gzip)
Viewtext | code | image
<?php declare(strict_types=1);

namespace Mirasvit\SearchSphinx\SphinxQL;

use Mirasvit\SearchSphinx\SphinxQL\Drivers\ConnectionInterface;

/**
* SQL queries that don't require "query building"
* These return a valid SphinxQL that can even be enqueued
* @SuppressWarnings(PHPMD)
* @codingStandardsIgnoreFile
*/
class Helper
{
/**
* @var ConnectionInterface
*/
public $connection;

/**
* Helper constructor.
* @param ConnectionInterface $connection
*/
protected function __construct(ConnectionInterface $connection)
{
$this->connection = $connection;
}

/**
* @param ConnectionInterface $connection
*
* @return Helper
*/
public static function create(ConnectionInterface $connection)
{
return new static($connection);
}

/**
* Returns a Connection object setup in the construct
*
* @return ConnectionInterface
*/
protected function getConnection()
{
return $this->connection;
}

/**
* Returns a new SphinxQL instance
*
* @return SphinxQL
*/
protected function getSphinxQL()
{
return SphinxQL::create($this->getConnection());
}

/**
* Prepares a query in SphinxQL (not executed)
*
* @param string $sql
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
protected function query($sql)
{
return $this->getSphinxQL()->query($sql);
}

/**
* Converts the columns from queries like SHOW VARIABLES to simpler key-value
*
* @param array $result The result of an executed query
*
* @return array Associative array with Variable_name as key and Value as value
*/
public static function pairsToAssoc($result)
{
$ordered = array();

foreach ($result as $item) {
$ordered[$item['Variable_name']] = $item['Value'];
}

return $ordered;
}

/**
* Runs query: SHOW META
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function showMeta()
{
return $this->query('SHOW META');
}

/**
* Runs query: SHOW WARNINGS
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function showWarnings()
{
return $this->query('SHOW WARNINGS');
}

/**
* Runs query: SHOW STATUS
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function showStatus()
{
return $this->query('SHOW STATUS');
}

/**
* Runs query: SHOW TABLES
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function showTables()
{
return $this->query('SHOW TABLES');
}

/**
* Runs query: SHOW VARIABLES
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function showVariables()
{
return $this->query('SHOW VARIABLES');
}

/**
* SET syntax
*
* @param string $name The name of the variable
* @param mixed $value The value of the variable
* @param boolean $global True if the variable should be global, false otherwise
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function setVariable($name, $value, $global = false)
{
$query = 'SET ';

if ($global) {
$query .= 'GLOBAL ';
}

$user_var = strpos($name, '@') === 0;

// if it has an @ it's a user variable and we can't wrap it
if ($user_var) {
$query .= $name . ' ';
} else {
$query .= $this->getConnection()->quoteIdentifier($name) . ' ';
}

// user variables must always be processed as arrays
if ($user_var && !is_array($value)) {
$query .= '= (' . $this->getConnection()->quote($value) . ')';
} elseif (is_array($value)) {
$query .= '= (' . implode(', ', $this->getConnection()->quoteArr($value)) . ')';
} else {
$query .= '= ' . $this->getConnection()->quote($value);
}

return $this->query($query);
}

/**
* CALL SNIPPETS syntax
*
* @param string $data The document text (or documents) to search
* @param string $index
* @param string $query Search query used for highlighting
* @param array $options Associative array of additional options
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function callSnippets($data, $index, $query, $options = array())
{
array_unshift($options, $data, $index, $query);

$arr = $this->getConnection()->quoteArr($options);
foreach ($arr as $key => &$val) {
if (is_string($key)) {
$val .= ' AS ' . $key;
}
}

return $this->query('CALL SNIPPETS(' . implode(', ', $arr) . ')');
}

/**
* CALL KEYWORDS syntax
*
* @param string $text
* @param string $index
* @param null|string $hits
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function callKeywords($text, $index, $hits = null)
{
$arr = array($text, $index);
if ($hits !== null) {
$arr[] = $hits;
}

return $this->query('CALL KEYWORDS(' . implode(', ', $this->getConnection()->quoteArr($arr)) . ')');
}

/**
* DESCRIBE syntax
*
* @param string $index The name of the index
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function describe($index)
{
return $this->query('DESCRIBE ' . $this->getConnection()->quoteIdentifier($index));
}

/**
* CREATE FUNCTION syntax
*
* @param string $udf_name
* @param string $returns Whether INT|BIGINT|FLOAT|STRING
* @param string $so_name
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function createFunction($udf_name, $returns, $so_name)
{
return $this->query('CREATE FUNCTION ' . $this->getConnection()->quoteIdentifier($udf_name) .
' RETURNS ' . $returns . ' SONAME ' . $this->getConnection()->quote($so_name));
}

/**
* DROP FUNCTION syntax
*
* @param string $udf_name
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function dropFunction($udf_name)
{
return $this->query('DROP FUNCTION ' . $this->getConnection()->quoteIdentifier($udf_name));
}

/**
* ATTACH INDEX * TO RTINDEX * syntax
*
* @param string $disk_index
* @param string $rt_index
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function attachIndex($disk_index, $rt_index)
{
return $this->query('ATTACH INDEX ' . $this->getConnection()->quoteIdentifier($disk_index) .
' TO RTINDEX ' . $this->getConnection()->quoteIdentifier($rt_index));
}

/**
* FLUSH RTINDEX syntax
*
* @param string $index
*
* @return SphinxQL A SphinxQL object ready to be ->execute();
*/
public function flushRtIndex($index)
{
return $this->query('FLUSH RTINDEX ' . $this->getConnection()->quoteIdentifier($index));
}
}