|
|
|
@@ -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)
|
|
|
|
|
{
|
|
|
|
|