Начало работы над search()
This commit is contained in:
parent
a4be42cc82
commit
3355611e20
|
@ -26,7 +26,7 @@
|
|||
],
|
||||
"require": {
|
||||
"php": "^8.0.0",
|
||||
"yiisoft/yii2": "*",
|
||||
"yiisoft/yii2": "2.*",
|
||||
"triagens/arangodb": "~3.2"
|
||||
},
|
||||
"require-dev": {
|
||||
|
|
|
@ -158,4 +158,8 @@ class ActiveQuery extends Query implements ActiveQueryInterface
|
|||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public function view() {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -251,7 +251,7 @@ abstract class ActiveRecord extends BaseActiveRecord
|
|||
*/
|
||||
public static function getDb()
|
||||
{
|
||||
return \Yii::$app->get('arangodb');
|
||||
return Yii::$app->get('arangodb');
|
||||
}
|
||||
|
||||
protected static function findByCondition($condition)
|
||||
|
|
|
@ -86,4 +86,6 @@ abstract class Migration extends Component implements MigrationInterface
|
|||
$this->db->getCollectionHandler()->truncate($collection);
|
||||
echo " done (time: " . sprintf('%.3f', microtime(true) - $time) . "s)\n";
|
||||
}
|
||||
|
||||
// Разработать создание графов и представлений
|
||||
}
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
namespace mirzaev\yii2\arangodb;
|
||||
|
||||
use Yii;
|
||||
use ArangoDBClient\Document;
|
||||
use ArangoDBClient\Statement;
|
||||
use yii\base\Component;
|
||||
use yii\base\InvalidParamException;
|
||||
use yii\base\NotSupportedException;
|
||||
|
@ -12,6 +10,12 @@ use yii\db\QueryInterface;
|
|||
use yii\helpers\ArrayHelper;
|
||||
use yii\helpers\Json;
|
||||
|
||||
use ArangoDBClient\Document;
|
||||
use ArangoDBClient\Statement;
|
||||
|
||||
use Exception;
|
||||
|
||||
|
||||
class Query extends Component implements QueryInterface
|
||||
{
|
||||
const PARAM_PREFIX = 'qp';
|
||||
|
@ -117,7 +121,7 @@ class Query extends Component implements QueryInterface
|
|||
* @param array $bindValues
|
||||
* @param array $params
|
||||
* @return array
|
||||
* @throws \Exception
|
||||
* @throws Exception
|
||||
*/
|
||||
public function execute($aql, $bindValues = [], $params = [])
|
||||
{
|
||||
|
@ -136,9 +140,9 @@ class Query extends Component implements QueryInterface
|
|||
Yii::beginProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
$cursor = $statement->execute();
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
} catch (\Exception $ex) {
|
||||
} catch (Exception $ex) {
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
throw new \Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
throw new Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
}
|
||||
return $this->prepareResult($cursor->getAll());
|
||||
}
|
||||
|
@ -613,7 +617,7 @@ class Query extends Component implements QueryInterface
|
|||
/**
|
||||
* @param null $db
|
||||
* @return array
|
||||
* @throws \Exception
|
||||
* @throws Exception
|
||||
*/
|
||||
public function all($db = null)
|
||||
{
|
||||
|
@ -624,9 +628,9 @@ class Query extends Component implements QueryInterface
|
|||
Yii::beginProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
$cursor = $statement->execute();
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
} catch (\Exception $ex) {
|
||||
} catch (Exception $ex) {
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
throw new \Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
throw new Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
}
|
||||
return $this->prepareResult($cursor->getAll());
|
||||
}
|
||||
|
@ -634,7 +638,7 @@ class Query extends Component implements QueryInterface
|
|||
/**
|
||||
* @param null $db
|
||||
* @return array|bool
|
||||
* @throws \Exception
|
||||
* @throws Exception
|
||||
*/
|
||||
public function one($db = null)
|
||||
{
|
||||
|
@ -646,9 +650,9 @@ class Query extends Component implements QueryInterface
|
|||
Yii::beginProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
$cursor = $statement->execute();
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
} catch (\Exception $ex) {
|
||||
} catch (Exception $ex) {
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
throw new \Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
throw new Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
}
|
||||
$result = $this->prepareResult($cursor->getAll());
|
||||
return empty($result) ? false : $result[0];
|
||||
|
@ -660,7 +664,7 @@ class Query extends Component implements QueryInterface
|
|||
* @param array $params
|
||||
* @param null $db
|
||||
* @return bool
|
||||
* @throws \Exception
|
||||
* @throws Exception
|
||||
*/
|
||||
public function insert($collection, $columns, $params = [], $db = null)
|
||||
{
|
||||
|
@ -687,9 +691,9 @@ class Query extends Component implements QueryInterface
|
|||
Yii::beginProfile($token, 'mirzaev\yii2\arangodb\Query::insert');
|
||||
$cursor = $statement->execute();
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::insert');
|
||||
} catch (\Exception $ex) {
|
||||
} catch (Exception $ex) {
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::insert');
|
||||
throw new \Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
throw new Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -701,7 +705,7 @@ class Query extends Component implements QueryInterface
|
|||
* @param array $params
|
||||
* @param null $db
|
||||
* @return bool
|
||||
* @throws \Exception
|
||||
* @throws Exception
|
||||
*/
|
||||
public function update($collection, $columns, $condition = [], $params = [], $db = null)
|
||||
{
|
||||
|
@ -730,9 +734,58 @@ class Query extends Component implements QueryInterface
|
|||
Yii::beginProfile($token, 'mirzaev\yii2\arangodb\Query::update');
|
||||
$cursor = $statement->execute();
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::update');
|
||||
} catch (\Exception $ex) {
|
||||
} catch (Exception $ex) {
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::update');
|
||||
throw new \Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
throw new Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
}
|
||||
$meta = $cursor->getMetadata();
|
||||
return isset($meta['extra']['operations']['executed']) ?
|
||||
$meta['extra']['operations']['executed'] :
|
||||
true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $collection
|
||||
* @param $columns
|
||||
* @param array $condition
|
||||
* @param array $params
|
||||
* @param null $db
|
||||
* @return bool
|
||||
* @throws Exception
|
||||
*/
|
||||
public function search($collection, $expression, $params = [], $db = null)
|
||||
{
|
||||
$this->from($collection);
|
||||
$clauses = [
|
||||
$this->buildFrom($collection),
|
||||
$this->buildSearch($expression),
|
||||
$this->buildOptions(),
|
||||
];
|
||||
|
||||
$aql = implode($this->separator, array_filter($clauses));
|
||||
|
||||
$fp = fopen('debug.txt', 'a');
|
||||
fwrite($fp, print_r($aql, true) . PHP_EOL);
|
||||
fclose($fp);
|
||||
|
||||
$params = ArrayHelper::merge(
|
||||
$params,
|
||||
[
|
||||
'query' => $aql,
|
||||
'bindVars' => $params,
|
||||
]
|
||||
);
|
||||
|
||||
$statement = $this->getStatement($params, $db);
|
||||
$token = $this->getRawAql($statement);
|
||||
Yii::info($token, 'mirzaev\yii2\arangodb\Query::search');
|
||||
try {
|
||||
Yii::beginProfile($token, 'mirzaev\yii2\arangodb\Query::search');
|
||||
$cursor = $statement->execute();
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::search');
|
||||
} catch (Exception $ex) {
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::search');
|
||||
throw new Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
}
|
||||
$meta = $cursor->getMetadata();
|
||||
return isset($meta['extra']['operations']['executed']) ?
|
||||
|
@ -746,7 +799,7 @@ class Query extends Component implements QueryInterface
|
|||
* @param array $params
|
||||
* @param null $db
|
||||
* @return bool
|
||||
* @throws \Exception
|
||||
* @throws Exception
|
||||
*/
|
||||
public function remove($collection, $condition = [], $params = [], $db = null)
|
||||
{
|
||||
|
@ -775,9 +828,9 @@ class Query extends Component implements QueryInterface
|
|||
Yii::beginProfile($token, 'mirzaev\yii2\arangodb\Query::remove');
|
||||
$cursor = $statement->execute();
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::remove');
|
||||
} catch (\Exception $ex) {
|
||||
} catch (Exception $ex) {
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::remove');
|
||||
throw new \Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
throw new Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
}
|
||||
$meta = $cursor->getMetadata();
|
||||
return isset($meta['extra']['operations']['executed']) ?
|
||||
|
@ -806,6 +859,16 @@ class Query extends Component implements QueryInterface
|
|||
return 'REMOVE ' . $collection . ' IN ' . $collection;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $collection
|
||||
* @param $columns
|
||||
* @return string
|
||||
*/
|
||||
protected function buildSearch(string $expression,): string
|
||||
{
|
||||
return 'SEARCH ' . Serializer::encode($expression);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
|
@ -846,7 +909,7 @@ class Query extends Component implements QueryInterface
|
|||
* @param string $q
|
||||
* @param null $db
|
||||
* @return int
|
||||
* @throws \Exception
|
||||
* @throws Exception
|
||||
* @throws \triagens\ArangoDb\ClientException
|
||||
*/
|
||||
public function count($q = '*', $db = null)
|
||||
|
@ -864,9 +927,9 @@ class Query extends Component implements QueryInterface
|
|||
Yii::beginProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
$cursor = $statement->execute();
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
} catch (\Exception $ex) {
|
||||
} catch (Exception $ex) {
|
||||
Yii::endProfile($token, 'mirzaev\yii2\arangodb\Query::query');
|
||||
throw new \Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
throw new Exception($ex->getMessage(), (int) $ex->getCode(), $ex);
|
||||
}
|
||||
return $cursor->getFullCount();
|
||||
}
|
||||
|
@ -874,7 +937,7 @@ class Query extends Component implements QueryInterface
|
|||
/**
|
||||
* @param null $db
|
||||
* @return bool
|
||||
* @throws \Exception
|
||||
* @throws Exception
|
||||
*/
|
||||
public function exists($db = null)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue